在调用didBeginEditing之前捕获UITextField

时间:2015-04-04 12:31:28

标签: ios objective-c iphone uitextfield

我有一个独特的UI情况,我需要以不同于didBeginEditing的方式处理tap事件。在某些情况下,文本字段会以编程方式获得焦点,但用户仍然可以通过点击文本字段手动设置焦点。

每当键盘进入视图时都会触发通知,但我希望此通知触发的代码仅在用户点击文本字段时执行,而不是在代码中设置焦点时执行。

通知声明:

[[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];
}

所以我猜我遇到的麻烦就是让这四行代码只能通过点击事件触发,而且我还没有找到一种在没有通知的情况下获取键盘大小的方法。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以使用textFieldShouldBeginEditing方法,如果需要它成为第一个响应者,则返回true。所以它将是:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    //Your code
    return true;
}