gpt4 book ai didi

iphone - Objective-C 运行时 : Swizzled method name?

转载 作者:可可西里 更新时间:2023-11-01 03:56:24 25 4
gpt4 key购买 nike

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

使用 Objective-C Runtime ,如何确定哪个方法名称 deleteBackward 已被调配到?然后,我该如何更改实现,以便 UITextField 调用 [self.delegate textField:self shouldChangeCharactersInRange:NSMakeRange(0, 0) replacementString:@""]为空时按下删除键。

此外,这种元编程是否会导致我的应用程序被 App Store 拒绝?

最佳答案

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

关于为什么未调用 deleteBackward 方法,我的猜测是输入系统正在使用更复杂的 UITextInput 中的方法。协议(protocol),最有可能是 replaceRange:withText:。当 text 参数为空字符串时,尝试调配它并执行调用。还要确保您的 swizzling 函数不会返回错误。

关于iphone - Objective-C 运行时 : Swizzled method name?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7839034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com