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

时间:2014-01-27 04:09:29

标签: ios objective-c xcode5

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

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

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

一个简单的解决方案是使用添加到“主”视图的简单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>

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

答案 2 :(得分:0)

在.m文件中使用此代码

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

        selectedTextField = textField;
        return YES;
}

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