2016-07-02 7 views
1

私は画面上の任意の場所をタップして、それを却下していますかの、しかし私はまた、私は、リターンキーを押したときに、それは却下したいので、これらは実際に、必要ではない今のように私は、複数のテキストフィールドUITextFieldキーボードを閉じますか?

@IBOutlet var emailLogin: UITextField! 
@IBOutlet var passLogin: UITextField! 
@IBOutlet var emailSignUp: UITextField! 
@IBOutlet var passSignUp: UITextField! 

を持っています。

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.emailLogin.delegate = self 
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(LoginViewController.dismissKeyboard)) 
    view.addGestureRecognizer(tap) 
} 

最初の質問:私は一つだけで却下する必要があるとき、私はそうのようなデリゲートを設定しますが、私は、リターンキーを却下する必要がある複数のビューを持っているとき、どのように私はこれを処理できますか?

また、2つのビューがありますが、どちらも同じクラスを使用します。これは私がやろうとしていることの問題ですか?

ここ

func dismissKeyboard() { 

    view.endEditing(true) 
} 

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

から、これが唯一の私が自己のように設定TextFieldにキーボードを閉じます。

すべての情報をお待ちしております!

EDIT: I could be doing this wrong

+1

あなたの最初の質問をよく理解していません。デリゲートをトリガーするには、すべてのtextFieldsデリゲートを 'self'に設定する必要があります。デリゲート関数では、あなたのIBOutlet変数に対して 'textField'をチェックして、異なる反応を起こします。彼らがどこにいるかは本当に問題ではありません。 –

+0

私はそれらをすべて代理人として設定します。それは私に悪い命令エラーを与える。 – Casey

+0

サンプルプロジェクトを作成してGitHubなどに配置できますか? –

答えて

2
は、次のようにコードを変更し

し、それが動作するはずです:

@IBOutlet var emailLogin: UITextField? 
@IBOutlet var passLogin: UITextField? 
@IBOutlet var emailSignUp: UITextField? 
@IBOutlet var passSignUp: UITextField? 

emailLogin?.delegate = self 
passLogin?.delegate = self 
emailSignUp?.delegate = self 
passSignUp?.delegate = self 

とき、あなたのLoginViewController負荷、他のクラスからIBOutletsが初期化されていなかった、これアンラップで終わりますnilスウィフトでは許可されていないオブジェクトです。 (あなたはXcodeのコンソール出力でそれを見ることができるはずです)。オプションの変数を使用すると、そのことが起こらないようになります。

+0

恐ろしい!意図したとおりに働く!本当に助けに感謝! – Casey

0

ViewControllerDelegateを使用して、textFieldおよびtextViewの外側のタップを処理します。 textFieldの外側をタップすると、キーボードが閉じられます。ビューコントローラに以下のコードを入力してください:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    super.touchesBegan(touches, withEvent:event) 
    self.view.endEditing(true) 
} 

これを処理するには、今すぐTapGestureを追加する必要はありません。

関連する問題