【问题标题】:Capturing UITextField tap before didBeginEditing is called在调用 didBeginEditing 之前捕获 UITextField 点击
【发布时间】:2015-04-04 12:31:28
【问题描述】:

我有一个独特的 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];
}

所以我想我遇到的问题是仅通过点击事件触发这四行代码,并且我还没有找到一种方法来获取键盘大小而无需通知。有什么建议吗?

【问题讨论】:

  • 文本字段委托方法是不可能的,但是如果你有必要的要求,那么做一件事把 UITapGestureRecognizer 放在你的文本字段上
  • 我宁愿使用 hitTest:withEvent: 或更准确地说是 pointInside:withEvent: 来指示在任何手势识别器或触摸方法触发之前发生的事情。

标签: ios objective-c iphone uitextfield


【解决方案1】:

您可以使用 textFieldShouldBeginEditing 方法并在需要它成为第一响应者时返回 true。所以它会是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-26
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    相关资源
    最近更新 更多