2017-02-26 5 views
0

これは私のSecondViewControllerクラスです:私のFisrtViewControllerと他の多くのアプリの中に完全に取り組んRETURNキーを押したときにキーボードが消えないのはなぜですか?

class SecondViewController: UIViewController, UITextFieldDelegate { 

@IBOutlet weak var txtNewItem: UITextField! 
@IBOutlet weak var lblResult: UILabel! 
@IBAction func btnAddNewItem(_ sender: Any) { 
    let itemsObject = UserDefaults.standard.object(forKey: "items") 
    var items:[String] 

    if let tmpItem = itemsObject as? [String] { 
     if txtNewItem.text == "" { 
      //Alert message if empty txtNewItem is ""    
     } else { 
      items = tmpItem 
      items.append(txtNewItem.text!) 
      UserDefaults.standard.set(items, forKey: "items") 
     } 
    } else { 
     items = [txtNewItem.text!] 
     UserDefaults.standard.set(items, forKey: "items") 
    } 
    txtNewItem.text = "" 
} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    self.view.endEditing(true) 
} 

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

2つの機能(touchesBeganとtextFieldShouldReturn)。

この場合、どこかをクリックするとキーボードが消えて正常に動作していますが、リターンキーを押すとキーボードは消えません。

私はXCodeシミュレータでテストしました。私のiPhone 7とiPad Air 2では、この3つのiDevicesで問題が続きます。

N.B:これらの機能にコードがないため、私はviewDidLoadとdidReceiveMemoryWarningを自発的に削除しました。

+0

'textFieldShouldReturn'でも' self.view.endEditing(true) 'を使います。 –

+0

申し訳ありませんが、私はこのコード行を試していて、作業していません... – LiTHiUM2525

+1

テキストフィールドの代理人を自己に初期化しましたか?私はあなたのコードでそれが表示されません –

答えて

2

あなたはこれらのコード行を追加する必要があります。これが機能するためにはviewDidLoad()の中へ

override func viewDidLoad(){ 
    super.viewDidLoad() 
    self.txtNewItem.delegate = self 
} 

を!今度はあなたのクラスをtextFieldのデリゲートに割り当てます。うれしかったよ!

+1

OPはアウトレットを使用しているので、Interface Builderでテキストフィールドのデリゲートを設定してください。コードは不要です。 – rmaddy

+0

これはあなたがいる開発者のタイプに依存します。私のように、デリゲートとそのデリゲートのメソッドの両方をコード内に持つようなものもあれば、ドラッグ・アンド・ドロップ・スタイルがもっと好きかもしれない人もいます。コードは、プログラムでもコードでも作成できるテキストフィールドを扱うという利点があります。そのため、私はそれを選択しました。 –

+0

しかし、非常によく指摘されている@rmaddy –

関連する問題