Могу ли я * заменить * UILabel на UIButton на FXLabel? - PullRequest
8 голосов
/ 21 декабря 2011

Итак, я пытаюсь заменить UILabel на UIButton на экземпляр FXLabel. Чтобы узнать больше о FXLabel (https://github.com/nicklockwood/FXLabel).), я знаю, что, используя расширения класса ( Подкласс UIButton для добавления свойства ), я всегда могу добавить другое свойство, в моем случае, FXLabel, просто добавив подпредставление, но мне нравятся удобство и возможности уже существующего свойства titleLabel.

Есть ли какой-нибудь метод "переключения" UILabel для FXLabel по подклассу или категории?

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

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

Мысли ?? Спасибо.

Ответы [ 2 ]

5 голосов
/ 21 декабря 2011

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

- (void)layoutSubviews {
    [super layoutSubviews];

    UILabel *titleLabel = [self titleLabel];
}

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

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

1 голос
/ 21 декабря 2011

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

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

...