Невозможно создать подкласс UILabel: нераспознанный селектор отправлен в UILabel

Я использую CocoaPods для импорта некоторых вещей. Щас пытаюсь использовать TTTAttributedLabel, который является богатым подклассом UILabel, с учетом URL-адреса и т. д.

Теперь у меня проблемы с тем, чтобы мое приложение распознало, что мои ярлыки на самом деле являются TTTAttributedLabelи не регулярно UILabel"S.

В моем.xib я перетащил обычный UILabel на мой взгляд, затем отредактировал класс метки следующим образом:

класс XIB

Это действительно автозаполнение имени для меня, так что я знаю, что знает о классе. Затем я перетащил соединение из XIB в класс представления, например так:

соединение Он определяет себя как TTTAttributedLabel автоматически, потому что он признает, что это то, что он есть, иначе он сказал бы UILabel,

Так как я указал use_frameworks! в моем podfile, Я должен импортировать класс, поэтому в верхней части класса моего представления у меня есть import TTTAttributedLabel,

Теперь, когда я пытаюсь использовать метку, она автоматически заполняется следующим образом: автозаполнения С правильным классом, TTTAttributedLabel, Но когда я делаю это:

print("labBody: ", labBody)

распечатывает это:

labBody:  <UILabel: 0x7fa754c86710; frame = (16 459; 42 21); text = 'Label'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x60000029cf20>>

думая, что это UILabel. Если я попытаюсь получить доступ к любому из TTTAttributedLabel-специфичные переменные или функции, он все еще автоматически заполняет их для меня:

labBody.enabledTextCheckingTypes = NSTextCheckingResult.CheckingType.link.rawValue

Но при использовании их во время выполнения происходит сбой всего приложения, говоря следующее:

 -[UILabel setEnabledTextCheckingTypes:]: unrecognized selector sent to instance 0x7fdfc7c59300

Я слепой? Почему это не работает? Это то, что я всегда делал. У меня может быть трудный вторник.. Я попробовал все обычные вещи, чистку, удаление производных данных, перезапуск Xcode, удаление приложения с устройства перед повторным запуском..

Я даже использовал TTTAttributedLabel раньше я знаю, что это работает. Единственное, что ново, это то, что я впервые использую use_frameworks!.. Это влияет на.xib? Делая невозможным узнать о подклассе, или что-то..?

1 ответ

Решение

Я понятия не имею, почему это сработало, но я предполагаю, что это как-то связано с тем, что этот модуль находится в Objective-C, а также связан с привязкой и загрузкой Obj-C.

В любом случае, все, что мне нужно было сделать, - это обернуть объект в новый локальный класс. NewClass а затем измените класс моих меток в.xib-файле на этот класс вместо TTTAttributedLabel (и выходы в классе моего взгляда, очевидно).

Не нужно ничего делать, кроме создания этого класса, он не должен содержать ничего.

Я читал кое-что об установке флага, как load ObjC-флаг, я не пробовал. Я думал, что это решение может также загрузить много других вещей Object-C, которые мне не нужны / не хотят загружаться..

Другие вопросы по тегам