2011-12-21 3 views
8

Итак, я пытаюсь изменить UILabel на UIButton вместо экземпляра FXLabel. Проверьте ссылку для получения дополнительной информации о FXLabel (https://github.com/nicklockwood/FXLabel). Я знаю, используя расширения класса (Subclass UIButton to add a property), я всегда мог добавить еще одно свойство, в моем случае, FXLabel, просто добавив подзаголовок в основном. Тем не менее, мне нравится удобство и особенности уже существующего имущества titleLabel.Могу ли я заменить * UILabel на UIButton на FXLabel?

Есть ли способ «переключить» UILabel на FXLabel по подклассу или категории?

Я знаю, что смогу это сделать, но это такой хак и не является будущим доказательством. И я не знаю, как изменить тип класса (Get UILabel out of UIButton).

UILabel *label; 
for (NSObject *view in button.subviews) { 
    if ([view isKindOfClass:[UILabel class]]) { 
     label = (UILabel *)view; 
     break; 
    } 
} 

Мысли ?? Благодарю.

ответ

5

Вот еще один способ, по крайней мере, получить доступ к этикетке. Создайте подкласс UIButton, а в этом подклассе переопределите layoutSubviews. Оттуда вы можете получить доступ этикетку непосредственно:

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    UILabel *titleLabel = [self titleLabel]; 
} 

Теперь мы все еще застряли с проблемой изменения на эту метку, чтобы быть подклассом. Думаю, вы могли бы попытаться динамически поменять класс UILabel с вашим подклассом FXLabel (как подробно here), но, честно говоря, это довольно рискованно.

Я бы сказал, что вам лучше создать свой собственный UIControl, который вы можете настроить в своем сердце. Нет риска, просто чистая доброта. Не должно быть слишком сложно подражать простому UIButton. Удачи!

+0

Спасибо за подсказку. Я думаю, что просто попробую создать свой собственный пользовательский класс. Я отмечу это как ответ на мой вопрос, если никто другой не даст мне ничего лучшего. Благодаря! –

+1

Я только что взломал его и добавил ярлык поверх кнопки без фактического ввода текста на кнопку. Теперь мне нужно отслеживать два свойства для альфа-изменений и т. Д., Но это намного проще, чем пытаться создать мой собственный UIControl. Я буду работать над этим в будущем и посмотреть, получу ли я что-нибудь –

1

Прошу прощения, но я не думаю, что вы можете сделать это любым надежным способом. Даже если вы подклассифицировали UIButton и переопределили методы titleLabel, вам также пришлось бы обрабатывать настройки состояния. И вы никогда не знаете, когда внутренний код ссылается непосредственно на частный ivar для метки.

Я создал подкласс UIButton для своих приложений, чтобы сделать что-то подобное (настраиваемые макеты кнопок & subviews), извините, что я не могу поделиться им прямо сейчас, он принадлежит клиенту. Не слишком сложно создать свой собственный код обработки состояния для ваших собственных подзонов.

+0

Спасибо за помощь. Я посмотрю, что я смогу собрать. –