【发布时间】:2016-09-01 14:56:28
【问题描述】:
我为方法swizzled创建了一个类别UITextField,它的名字类似于UITextField+MaxLength,我实现了+load方法来做swizzled,但是我没有在前缀头或其他文件中导入它,只是将它导入SomeViewController.
我认为 swizzled 应该只在 SomeViewController 中工作,但是为什么在每个 UITextField 甚至 UISearchBar 中都调用 swizzled 方法?并且在我运行应用程序时调用+load 方法?
编辑
我想我需要指出为什么我使用 swizzled,因为我想使用 KVO 来观察文本的变化,所以我 swizzled setText 并关联了一个名为 displayLength 的属性 NSNumber,所以,如果我不要使用 KVO,我可以删除该类别的 swizzled 部分,并且可以将子字符串剪切到特定的最大长度。
【问题讨论】:
-
这就是 swizzling 的工作原理。如果要限制特定字段的长度,请使用文本字段委托方法。
-
我真的很难理解你。但是,如果您想使用 KVO,请继续。你不需要为它做方法调配。 KVO 解决了您的问题并在每个实例基础上工作。 (这是因为它使用 isa swizzling 并覆盖方法而不是 swizzling 方法。)
标签: ios objective-c objective-c-category method-swizzling