2

我正在使用 CocoaPods 导入一些东西。现在我正在尝试使用TTTAttributedLabel,这是一个丰富的子类UILabel,允许点击 URL 等。

现在,我无法让我的应用程序识别出我的标签实际上是 的实例TTTAttributedLabel,而不是常规UILabel的 。

在我的 .xib 中,我将一个常规UILabel拖到我的视图中,然后像这样编辑标签的类:

xib类

它确实为我自动完成了名字,所以我知道它知道这个类。然后,我将连接从 xib 拖到视图的类,如下所示:

联系TTTAttributedLabel自动将自己指定为 a,因为它识别出它就是这样,否则它会说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 吗?让它无法知道子类,或者什么..?

4

1 回答 1

2

我不知道为什么会这样,但我认为这与这个 pod 在 Objective-C 中以及绑定和加载 Obj-C 的东西有关。

无论如何,我所要做的就是将对象包装在一个新的本地类中。 新班 然后将 .xib 文件中的标签类更改为此类,而不是TTTAttributedLabel(显然,我的视图类中的插座)。

除了创建这个类,不需要做任何其他事情,它不需要包含任何东西。

我确实读过一些关于设置标志的东西,比如load ObjC-flag,我没有尝试过。我认为该解决方案还可能会加载许多我不需要/不想加载的其他 Object-C 内容。

于 2017-04-01T12:33:50.090 回答