在调用 didBeginEditing 之前捕获 UITextField tap
Capturing UITextField tap before didBeginEditing is called
我有一个独特的 UI 情况,我需要以不同于使用 didBeginEditing 处理的方式处理点击事件。在某些情况下,文本字段以编程方式获得焦点,但用户仍然可以通过点击文本字段手动设置焦点。
有一个通知会在键盘出现时触发,但我希望此通知触发的代码仅在用户点击文本字段时执行,而不是在代码中设置焦点时执行。
通知声明:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:self.view.window];
通知触发的方法:
- (void)keyboardWillShow:(NSNotification*)notification
{
CGSize kbSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0, 0, kbSize.height / 3, 0);
[_tableView setContentInset:contentInsets];
[_tableView setScrollIndicatorInsets:contentInsets];
}
所以我想我遇到的麻烦是让这四行代码仅通过点击事件触发,而且我还没有找到一种方法来获取键盘大小而无需通知。有什么建议吗?
您可以使用 textFieldShouldBeginEditing 方法和 return true 如果您需要它成为第一响应者。所以它将是:
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
//Your code
return true;
}
我有一个独特的 UI 情况,我需要以不同于使用 didBeginEditing 处理的方式处理点击事件。在某些情况下,文本字段以编程方式获得焦点,但用户仍然可以通过点击文本字段手动设置焦点。
有一个通知会在键盘出现时触发,但我希望此通知触发的代码仅在用户点击文本字段时执行,而不是在代码中设置焦点时执行。
通知声明:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:self.view.window];
通知触发的方法:
- (void)keyboardWillShow:(NSNotification*)notification
{
CGSize kbSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0, 0, kbSize.height / 3, 0);
[_tableView setContentInset:contentInsets];
[_tableView setScrollIndicatorInsets:contentInsets];
}
所以我想我遇到的麻烦是让这四行代码仅通过点击事件触发,而且我还没有找到一种方法来获取键盘大小而无需通知。有什么建议吗?
您可以使用 textFieldShouldBeginEditing 方法和 return true 如果您需要它成为第一响应者。所以它将是:
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
//Your code
return true;
}