Objective-C运行时:Swizzled方法名称?

时间:2011-10-20 16:19:16

标签: iphone objective-c ios uitextfield objective-c-runtime

试图Detect backspace in UITextField, 我已经尝试了子类化UITextField and overriding -[UIKeyInput deleteBackward],但它永远不会被调用。所以,我怀疑UITextFielddeleteBackward调到另一个方法名称。

使用Objective-C Runtime,如何确定哪个方法名称deleteBackward已被调整?然后,我如何更改实现方式,以便{_ 1}}在空键时按下删除键时调用UITextField

此外,这种元编程会让我的应用程序被App Store拒绝吗?

1 个答案:

答案 0 :(得分:4)

Swizzling不会更改方法的名称。如果确实如此,则无法调用该方法,因为运行时使用名称查找实现。它所做的就是更改调用特定方法时运行的代码的地址。

我猜测未调用deleteBackward方法的原因是输入系统使用的是更复杂的UITextInput协议中的方法,很可能是replaceRange:withText:。当text参数为空字符串时,请尝试调整并执行调用。还要确保您的调配功能不会返回错误。