2016-06-01 7 views
3

から[RETURN]キー操作でさまざまな機能を実行する:私は2つのテキストフィールドを持つ別のテキストフィールド

@IBOutlet weak var loginEmailInput: UITextField! 
@IBOutlet weak var loginPasswordInput: UITextField! 

loginEmailInputがアクティブで、リターンキーが押されたとき、私はキーボードを閉じたい:

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

loginPasswordInputがアクティブで、リターンキーを押すと、私はまた、機能loginButtonPressed(...)を実行したい:

func textFieldShouldReturn(loginPasswordInput: UITextField) -> Bool { 
    loginPasswordInput.resignFirstResponder() 
    loginButtonPressed(self) 
    return true 
} 

しかし、私は私が今textFieldShouldReturn機能再宣言したことを示すエラー受信:「textFieldShouldReturn」

私は [return]キーが異なると押されている処理することができますどのように

無効な再宣言をテキストフィールドはアクティブですか?

答えて

3

あなたが与えられたsenderに応じて、一度、分岐関数を定義する必要があります。

​​

を代わりにスイッチケース使用:あなたはできるだけ多くの冗長性を削除する場合

func textFieldShouldReturn(sender: UITextField) -> Bool { 
    switch sender { 
    case loginEmailInput: 
     sender.resignFirstResponder() // or loginEmailInput.resignFirstResponder() 
    case loginPasswordInput: 
     sender.resignFirstResponder() // or loginPasswordInput.resignFirstResponder() 
     loginButtonPressed(self) 
    default: 
     break 
    } 
    return true 
} 

をさらに使用することができます:

func textFieldShouldReturn(sender: UITextField) -> Bool { 
    if sender == loginPasswordInput { 
     loginButtonPressed(self) 
    } 
    return true 
} 

理由:textFieldShouldReturnsenderがこのような状況のために渡されるようになります。これは、デリゲート関数が、デリゲートメソッドが呼び出される場所から渡されたオブジェクトを取得し、受信者が複数のインスタンスに同時に応答できるようにするための一般的なパターンです。

+0

'textField'はどこに定義されていますか?私はこれを実行し、両方で 'return'を押してみましたが、何もしませんでした。 – Ben

+0

@Ben 'textField'は関数のパラメータです。 – luk2302

+0

以前は、テキストフィールド名の名前(例えば 'loginPasswordInput')を使って動作しましたが、' textField'を使っても何もしません。 – Ben

関連する問題