3

我有一个按钮,它在 iOS 5 和 6 上照常工作。但在 iOS 7 上,当我按下按钮时,键盘会关闭,但不会调用该方法。当我第二次按下它时,它按预期工作。

这是为什么?

这是代码:

[self.loginButton addTarget:self action:@selector(loginButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

我在 UITableView 单元格中有按钮。

编辑:

这是我在此方法开始时关闭键盘的方式,但直到我第二次点击按钮时,此方法才会在 iOS7 上被调用。

for (UITextField *field in @[self.loginField, self.passwordField]) {
    if ([field isFirstResponder]) {
        [field resignFirstResponder];
    }
}

我也有手势识别器可以在外面点击删除键盘:

UITapGestureRecognizer *tapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(removeKeyboard)];
[self.view addGestureRecognizer:tapper];
tapper.cancelsTouchesInView = NO;

这是它的方法:

- (void) removeKeyboard
{
    [self traverseAllSubviewsOfView:self.view withBlock:^(UIView *inView) {
        [inView resignFirstResponder];
    }];
}
4

2 回答 2

1

这对我有帮助 - 我将控制器设置为手势识别器的委托并实现以下方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    // test if touch is on button
    if ([touch.view isKindOfClass:[UIControl class]]) {
        return NO;
    }
    return YES; // handle the touch
}
于 2013-10-18T08:42:19.747 回答
0

你检查cancelsTouchesInView过手势识别器的属性吗?此属性控制是否将触摸传递到任何底层视图。因此,将此设置为NO应该允许将触摸发送到您的按钮。更多细节在这里。

此属性可以在代码中或在 Interface Builder 中设置。您可以通过突出显示手势识别器并在属性检查器中取消选中“取消视图中的触摸”(我认为)来在 IB 中设置它。

我目前不在 Mac 前,所以我无法确认确切的措辞。

于 2013-10-18T09:43:13.683 回答