试图Detect backspace in UITextField,
我已经尝试了子类化UITextField
and overriding -[UIKeyInput deleteBackward]
,但它永远不会被调用。所以,我怀疑UITextField
将deleteBackward
调到另一个方法名称。
使用Objective-C Runtime,如何确定哪个方法名称deleteBackward
已被调整?然后,我如何更改实现方式,以便{_ 1}}在空键时按下删除键时调用UITextField
。
此外,这种元编程会让我的应用程序被App Store拒绝吗?
答案 0 :(得分:4)
Swizzling不会更改方法的名称。如果确实如此,则无法调用该方法,因为运行时使用名称查找实现。它所做的就是更改调用特定方法时运行的代码的地址。
我猜测未调用deleteBackward
方法的原因是输入系统使用的是更复杂的UITextInput协议中的方法,很可能是replaceRange:withText:
。当text
参数为空字符串时,请尝试调整并执行调用。还要确保您的调配功能不会返回错误。