【问题标题】:UITapGestureRecognizer and auto correctionUITapGestureRecognizer 和自动校正
【发布时间】:2011-10-15 05:31:11
【问题描述】:

我有以下代码:

- (void)viewDidLoad
{
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self 
                                    action:@selector(dismissKeyboard)];
    [self.view addGestureRecognizer:tap];
    tap.cancelsTouchesInView = NO;
    tap.delegate = self;
    [tap release];
}

-(void)dismissKeyboard {
    [self.textField resignFirstResponder];
}

textField 有一个 clearButton 并且启用了自动更正。当我点击 clearButton 时,一切正常,在UITextField 被清除后键盘仍然出现。但是,当我不想接受建议的自动更正时,键盘会消失,我的文本会被建议的替换。

我需要UITapGestureRecognizer,因为我在UITableView 中有UITextField,所以当用户在UITextField 之外点击时,我想退出键盘。

如何解决此问题,以便在用户需要且键盘仍处于活动状态时拒绝自动更正?为什么 clearButton 可以正常工作,而拒绝自动更正时不能正常工作?

编辑: 它可以与 clearButton 一起正常工作,因为它位于 UITextField 内。因此,手势不会被触发。但是当点击建议的文本更正时,它会被触发......有没有办法检查用户是否点击了建议的文本更正?

【问题讨论】:

    标签: iphone tap autocorrect


    【解决方案1】:

    这是我为解决点击蓝色自动更正文本时的问题而实施的手势委托方法:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        BOOL handleTouch = NO;
        UIView *v = [self.view hitTest:p withEvent:nil];
        Class autocorrectionCancelClass = NSClassFromString(@"UIAutocorrectInlinePrompt");
        if( ![v isKindOfClass:UIControl.class] && ![v isKindOfClass:autocorrectionCancelClass]  && ![v isDescendantOfView:currentlyEditedTextView] )
        {
            handleTouch = YES;
        }
    
        return handleTouch;
    }
    

    点击自动更正取消按钮后,v 是私有 SDK 类 UIAutocorrectInlinePrompt 的视图,但它也是编辑后的 ​​UITextField/UITtextView 的子视图。

    编辑:检查类更好,因为对于UITextField,UIAutocorrectInlinePrompt 视图不是该字段的后代(在 iOS 4.3 和 5.0 上测试)。问题是这个类可以重命名为私有类。

    【讨论】:

      【解决方案2】:

      kenji 的解决方案运行良好,但不包括 UIControl-s。 这是他的解决方案的更简洁的版本:

      - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
      {
          return ![touch.view isKindOfClass:NSClassFromString(@"UIAutocorrectInlinePrompt")];
      }
      

      【讨论】:

        猜你喜欢
        • 2015-08-06
        • 1970-01-01
        • 2014-04-26
        • 2014-12-20
        • 2020-10-29
        • 2019-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多