我的视图中有几个UITextField(每个都在UITableViewCell中)。当从任何文本字段触发键盘时,我需要制作一些动画,主要是为了更改UITableView的框架。键盘隐藏时也必须如此。
我已完成动画,所以这不是问题。
现在,我使用NSNotificationCenter来捕获键盘的显示/隐藏:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil];
问题是当键盘可见(使用文本字段)时我按下另一个文本字段。通常对于这个东西,键盘不会隐藏,但会保持可见。
它在iOS 4中运行良好,但问题在于3.1.3(这是我可以测试的版本 - 可能是3.2以下的任何版本)。在3.2以上的版本中,将焦点从文本字段直接更改为另一个文本字段将触发UIKeyboardWillHideNotification和UIKeyboardWillShowNotification。
在没有NSNotificationCenter的情况下,任何人都知道在键盘真正显示/隐藏时执行某些动画的方法吗?
或者如何使用低于3.2的版本克服此问题?
感谢。
答案 0 :(得分:12)
您可以做的是将textfield的/ textview的委托设置为当前视图控制器并实现这两种方法
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
_keyboardWillHide = NO;
return YES;
}
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
_keyboardWillHide = NO;
return YES;
}
在您的方法中,UIKeyboardWillHideNotification
通知触发后,您可以执行类似
if (_keyboardWillHide) {
// No other textfield/textview was selected so you can animate the tableView
...
}
_keyBoardWillHide = YES;
请告诉我这是否适合您。
答案 1 :(得分:2)
您可以将NSTimer设置为0.1秒,以便在一个中设置动画,而在另一个中,取消定时器,这样,如果您同时获得UIKeyboardWillHide和UIKeyboardWillShow,您将得到一个有机会取消计时器。如果你没有得到两者,计时器将达到零并且动画将被执行。
答案 2 :(得分:1)
考虑使用UITextFieldDelegate
协议。方法textFieldShouldBeginEditing
:将在通知之前触发,并且每次进入文本字段时都会触发。