iOS14 点击搜索表情键盘闪退(BlocksKit方面)

iOS 14 开始,系统的 emoji 键盘内部有一个搜索框 TUIEmojiSearchTextField


图中的“搜索表情符号”就是本文提及的搜索框

    这个搜索框如果在 init 的时候设置 delegate(或者设置了keyboardAppearance 会导致触发死循环,目前我们并不需要为这个新的系统TF做代理,所以需要过滤掉它。

     我出错的位置是BlocksKit里面改用了“TUIEmojiSearchTextField”的delegate。BlocksKit会在把delegate变成block使用,非常方便,但是这里明显是转换了一个我们并不需要的delegate所以在BlocksKit获取delegate的地方过滤它。

     通过断点,我发现会有一个TUIEmojiSearchTextField的delegate在“bk_registerDynamicDelegateNamed:forProtocol:”方法中被调用,它主要功能就是修改 getter 和 setter 方法,将原有的 delegate 转发到 realDelegate,修改原有的 delegate 的实现。下图即是bk_registerDynamicDelegateNamed:forProtocol方法。


图中为bk_registerDynamicDelegateNamed:forProtocol

在setdelegate中,过滤掉TUIEmojiSearchTextField,加入如下代码

 if(@available(iOS13.0, *)) {            if([delegateisKindOfClass:NSClassFromString(@"TUIEmojiSearchTextField")]) {                delegate =nil;

           }

        }

变成下面

IMPsetterImplementation =imp_implementationWithBlock(^(NSObject*delegatingObject,iddelegate) {

A2DynamicDelegate*dynamicDelegate =getDynamicDelegate(delegatingObject, protocol, infoAsPtr,YES);

if([delegateisEqual:dynamicDelegate]) {

delegate =nil;

}

        if(@available(iOS13.0, *)) {

            if([delegateisKindOfClass:NSClassFromString(@"TUIEmojiSearchTextField")]) {

                delegate =nil;

            }

        }

dynamicDelegate.realDelegate= delegate;

});

即可。

文章方法参考自腾讯的QMUI的1042问题:Tencent/QMUI_iOS/issues/1042

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容