2014-11-23 80 views
1

這個問題一直讓我發瘋。看起來無論我嘗試什麼,只要在簡單的Swift程序中顯示,我都無法隱藏鍵盤。不能解僱鍵盤,UITextField委託被稱爲OK

當我在textFieldShouldReturn中resignFirstResponder()時不起作用,在通過從touchesBegan(...)調用endEditing()來處理背景觸摸時它不起作用。我可以看到,當我爲它們設置調試器斷點時,這些相應的方法全部被調用,所以委託被正確設置並按預期調用。

下面是我的具體步驟:

  • 創建一個新的單一視圖應用斯威夫特項目
  • 將一個的UITextField到視圖,線了IBOutlet中,設置的ViewController了作爲UITextFieldDelegate。
  • 在iPhone 6模擬器或iPhone 6設備上運行
  • 一旦鍵盤出現,它永遠不會被解僱!

我不知道 - 我錯過了什麼?

這裏是我的ViewController的全部內容:

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate { 

@IBOutlet weak var myTextField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     myTextField.delegate = self 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
     self.view.endEditing(true) 
    } 

    func textFieldDidBeginEditing(textField: UITextField!) { 
     return 
    } 

    func textFieldShouldEndEditing(textField: UITextField!) -> Bool { 
     return false 
    } 

    func textFieldShouldReturn(textField: UITextField!) -> Bool { 
     textField.resignFirstResponder() 
     return true 
    } 
} 

回答

0

您正在返回'false''textFieldShouldEndEditing'。下面是從'UITextFieldDelegate'文件的摘錄:

返回值

YES如果編輯應停止;否則,沒有如果編輯會話 應繼續

討論

當文本字段被要求辭職第一 響應狀態時調用此方法。當您的應用程序詢問文字 字段的焦點或當用戶嘗試將編輯焦點更改爲另一個控件時,可能會發生這種情況。但是,在焦點實際發生變化之前,文本字段會調用此方法,以便讓您的代表有機會決定是否應該使用 。

通常情況下,您將從此方法返回YES以允許文字 字段退出第一個響應者狀態。但是,如果代理人在 文本字段中檢測到無效內容,您可能會返回NO, 。通過返回NO,可以防止用戶將 切換到另一個控件,直到文本字段包含有效值。

Source

所以,要麼返回從中'true'或徹底去除方法,除非你真的需要做的東西在裏面有用。也應該刪除'textFieldDidBeginEditing''touchesBegan'。我真的很驚訝,相同的代碼在Objective-C中工作。

+1

哦,對於......我從一些示例代碼中剪切並粘貼了一組UITextDelegate方法,並且完全忽略了其他方法,假設它們是無害的樣板文件。而且你100%正確,當我在Obj-C中進行'等價'測試時,我剛剛實現了我感興趣的回調函數,並且忽略了其他函數,所以它工作正常。咄! – TRB 2014-11-24 17:58:57