UITextfield的清除按钮在UIScrollView内部隐藏键盘

ani*_*hin 5 xcode uiscrollview uitextfield ios

我在UIScrollView中有一个文本字段,我想在用户开始编辑时显示一个清除按钮.此外,当用户点击UIScrollview的背景(但不是文本字段)时,我需要隐藏键盘.显示清除按钮不是问题,问题是当点击清除按钮时键盘被隐藏并且文本字段不会被清除.显然问题在于手势识别器,因为当单击清除按钮时,处理此方法的方法会被触发(但是在​​轻触文本字段时不会触发).这是我的代码:

    //adding gesture recognizer so i can hide keyboard when user taps scrollview
    - (void) textFieldDidBeginEditing:(UITextField *)textField
    {
        if (self.tapOutside == nil) self.tapOutside = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textFieldTouchOutSide:)];

        [self.scrollView addGestureRecognizer:self.tapOutside];
    }

    //This hides keyboard BUT IS ALSO CALLED WHEN CLEAR BUTTON IS TAPPED
    - (void)textFieldTouchOutSide:(id)sender
    {
        [self.textfield resignFirstResponder];
    }

    //NEVER GETS CALLED
    - (BOOL) textFieldShouldClear:(UITextField *)textField {
        return YES;
    }
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题?也许更好的方法来添加手势识别器?我想不出没有优雅的解决方案......非常感谢...

小智 13

我遇到了同样的问题并解决了它实现以下方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // Disallow recognition of gestures in unwanted elements
    if ([touch.view isMemberOfClass:[UIButton class]]) { // The "clear text" icon is a UIButton
        return NO;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

不要忘记遵守"UIGestureRecognizerDelegate"协议并设置委托(使用你的vars):

self.tapOutside.delegate = self;
Run Code Online (Sandbox Code Playgroud)

干杯