繁体   English   中英

控制 - 拖动以在Xcode 5中创建IBAction以关闭键盘?

[英]Control-drag to create IBAction in Xcode 5 to dismiss keyboard?

我有一个带有文本字段的视图控制器。 当用户通过控制从Xib文件中的文本字段外部拖动到我的.h文件时,我正在尝试创建一个IBAction来关闭它们键盘,但是我没有选择“Action”的选项,“只有”Outlet“和”Outlet collection。“ 当我在* .m文件中控制拖动时,我甚至没有一个窗口要求我选择。 我错过了什么?

我能够在Xcode 4中做到这一点。

从“文本字段外”按住Ctrl键拖动时,很可能与视图控制器的顶级视图进行交互。 这是一个没有动作的UIView对象。 只有从UIControl继承的视图才有动作,例如按钮,文本字段。 这不是XCode 4 vs 5的问题 - 它总是这样。

在视图控制器中,覆盖touchesBegan:withEvent: . 拨打[self.view endEditing]以关闭键盘。

这可能是因为您的视图控制器从继承UIResponder类,因为这样做UIViews 当用户触摸屏幕上的某些内容时,事件被传递到响应者链,例如从子视图到父视图到父视图控制器等,直到其中一个响应者决定响应或有目的地丢弃该事件。 通过覆盖touchesBegan:withEvent: ,您的视图​​控制器可以处理该事件并执行一些有意义的操作(例如关闭键盘)。

一个简单的解决方案是使用添加到“主”视图的简单UITapGestureRecognizer。

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

然后方法hideKeyboard:

- (void)hideKeyboard
{
    [[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
} <br>

点击通过视图发送,直到找到可以管理它的视图,例如触发手势的视图控制器视图。

在.m文件中使用此代码

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

        selectedTextField = textField;
        return YES;
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        [selectedTextField resignFirstResponder];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM