关于UITextField键盘收起问题

最近,我在项目中遇到了这样的情况。

情景还原:

页面中有两个UITextField,其中textFieldA 需要点击弹出键盘,输入数据。因为要实时监听这个TextField的输入变化,所以我添加了

[_textFieldA addTarget:self action:@selector(textFieldDidChangeForA:) forControlEvents:UIControlEventEditingChanged];

另外textFieldB则需要点击有隐藏键盘,同时弹出actionSheet选择框,把选择的结果输入到TextField。为了方便管理,我同样添加了

[_textFieldB addTarget:self action:@selector(textFieldBeginEditingForB:) forControlEvents:UIControlEventEditingDidBegin];

然后在方法-(void)textFieldBeginEditingForB中,添加了代码[self.view endEditing:YES]; 等。

至此开始跑代码实际测试。

点击textFieldB,正确弹出actionSheet,键盘并没有弹起。

点击textFieldA,正确弹出键盘,并实时监听到数据输入。

问题出现在先点击textFieldA,然后点击textFieldB,这时候,键盘A并不会收起,挡住了actionSheet选择。并且再点击键盘A所有按钮,都失去任何效果。即使退出页面,这个“假”键盘依旧会显示在页面上。必须重新点击textFieldA,才能取消掉键盘。

经过多方修改尝试,发现问题出现在UIControlEventEditingDidBegin状态上。在点击切换textField过程中,会出现丢失焦点的问题,从而对当前页面的键盘,并不能正确处理。这个丢失是不可逆的。无论是

1.[_textFieldA resignFirstResponder];//单独设置textFieldA隐藏键盘

2.[self.view endEditing:NO];//重新获取焦点
   [self.view endEditing:YES];//重新取消键盘
3.[[UIApplication sharedApplication].keyWindow endEditing:YES];//获取主页面去操作键盘

都没效果。

最后,

只能放弃[_textFieldB addTarget:self action:@selector(textFieldBeginEditingForB:) forControlEvents:UIControlEventEditingDidBegin];

使用_textFieldB.delegate = self;在delegate方法-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField里,单独对textFieldB判断,进而实现键盘A的收起操作。

 

事后总结:

1.检查问题应该仔细,发现问题根本所在。

2.当尝试过无法达到效果时,应果断更换实现功能的方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值