UITextField self.delegate = self

UITextField 代理设置为自己,导致键盘弹出时,界面卡死

我有一个UITextField的子类JXTextField,我希望实现注册时,用户输入邮箱时候有邮箱联想的功能,比如:123@s,此时会自动补全新浪邮箱剩下的部分ina.com。我希望该功能的实现,在JXTextField中实现。于是,我写下了这样一句代码:

self.delegate = self;

运行这段代码,点击输入框,先是程序就再不响应了,XCode也没什么有用的提示,试一两次,XCode也不再响应了。
谷歌发现

- (BOOL)respondsToSelector:(SEL)aSelector

该方法会无限次调用。每次aSelector都为customOverlayContainer

解决办法

-1.在UIView子类上添加UITextField。
-2.重写 - (BOOL)respondsToSelector:(SEL)aSelector方法

- (BOOL)respondsToSelector:(SEL)aSelector
{
if(aSelector==@selector(customOverlayContainer)){
    return NO;
}
return [super respondsToSelector:aSelector];}

但是customOverlayContainer这个是个私有API,提交审核不会通过,最终我用如下方法,成功通过审核:

- (BOOL)respondsToSelector:(SEL)aSelector
{
    NSString *str = NSStringFromSelector(aSelector);
    if([str hasPrefix:@"customOverlayC"]){
        return NO;
    }
    return [super respondsToSelector:aSelector];}

stackoverflow相关内容 点击查看

推荐阅读更多精彩内容