2017-02-16 10 views
1

私は、次の方法があります:Swift 3ではどのように呼び出すことができますか?ユーザーの入力が4文字の後にメソッドが準備しますか?

@IBAction func postcodeTextfieldDidChanged(_ sender: UITextField) { 

     if (postcodeTextField.text?.characters.count == 4) { 
      self.postcode = postcodeTextField.text 
      postcodeHas4Chars = true 
     } else { 
      postcodeHas4Chars = false 
     } 
    } 

そして準備-方法:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

     if segue.identifier == "CoffeeShopListWithPostcode" { 
      if (postcodeHas4Chars == true) { 
       if let list = segue.destination as? CoffeeShopListVC { 
        list.postcode = postcode 
       } else { 
        print("Data NOT Passed!") 
       } 
      } 
     } else { print("Id doesnt match with Storyboard segue Id") 
     } 
    } 

コードが動作し、私は次のViewControllerに郵便番号を送信することができますが、どのように私はにコードを変更することができます4番目の入力の後に自動的にメソッドを呼び出しますか? 現時点では、ユーザーは入力を手動で終了して実行できる必要があります。

+0

これで、ユーザーが4番目の文字を入力したときにセグが自動的に実行されますか? – Sweeper

+0

はい、正しいです。最後の文字を入力した後、アプリは自動的にコンテンツを次のビューに送信します。現時点では、キーボードの入力を前にしておく必要があります。 – Severin

答えて

4

テキストフィールドのテキストが変更されるたびに、テキストが4文字かどうかを確認します。そうであれば、performSegue(withIdentifier, sender:)に電話してください。シンプル:

@IBAction func postcodeTextfieldDidChanged(_ sender: UITextField) { 

    if (postcodeTextField.text?.characters.count == 4) { 
     self.postcode = postcodeTextField.text 
     postcodeHas4Chars = true 
     performSegue(withIdentifier: "CoffeeShopListWithPostcode", sender: self) 
    } else { 
     postcodeHas4Chars = false 
    } 
} 

また、あなたが代わりにvalueChanged eventeditingChangedイベントに接続されていることを覚えておいてください。

+0

ありがとうございますが、このメソッドは郵便番号(textinput)を次のビューに送信しません。 – Severin

+0

@ performSegue行を追加するだけです。何かを削除しましたか? – Sweeper

+0

ああ私は間違いを犯し、画面は常に二度実行された。ありがとうスイーパー。ところで、私は別の解決策を見つけました。 after self.postcode = postcodeTextField.text私はpostcodeTextField.endEditing(true)を実行し、これはキーボードを閉じます。つまり、sequeが実行されます。 – Severin

関連する問題