簡體   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