2016-06-13 8 views
0

ユーザーがUITextFieldで「enter」をクリックするとすぐにUIActivityIndi​​catorを開始しようとしています。一度彼らは、Webに格納されている情報のためのアプリを取得入力ヒット以来、私は、ユーザーがアプリが動作していることを知ってほしいと思います。iOS 9 Swift Segue from TextField

Webフェッチは、結果に基づいてsegueが実行されるかどうかに基づいてshouldPerformSegueWithIdentifier関数内で行われます。

したがって、ユーザーがリターンキーをクリックしたときに呼び出されるメソッドの順序は何ですか。私はその瞬間にUIActivityIndi​​catorを開始したいと思います。私は "textFieldDidEndEditingとtextFieldShouldReturn"を試しましたが、PrepareForSegueとShouldPerformSegueWithIdentifierの後に両方とも発生します。

ありがとうございます。

答えて

3

textFieldShouldReturnのコードを呼び出してみませんか?

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    activityIndicator.startAnimating() 
    //Do the web stuff 
    if shouldPerformSegue == true { 
     self.performSegueWithIdentifier("Some Identifier", sender: self) 
    } 
    return true 
} 
+0

ああ、shouldPerformForSegueでWebのものを呼び出すのではなく、textFieldShouldReturnで呼び出す必要がありますか?しかし、それは自己を呼ぶものではありません。 self.performSegueWithIdentifierは、textFieldShouldReturnの前に呼び出されることを前提にしていますか? – omzy

+0

textFieldShouldReturnでself.performSegueWithIdentifierを呼び出すと、shouldPerformSegueWithIdentiferが後で実行されます。 – penatheboss

+0

これは私の問題を解決しました!ありがとう! +1 – omzy

1

これはうまくいかないように思っています。 shouldPerformSegueWithIdentifierで非同期ネットワークトランザクションを実行することはできず、そのトランザクションの結果を使用して、segueを実行するかどうかを決定します。

セグを一切呼び出さないでください。

textFieldShouldReturnメソッドを使用します。このメソッドでは、常にTRUEを返し、アクティビティインジケータを表示し、ネットワーク要求を開始します。要求が完了するとアクティビティインジケータが取り除かれ、セグをトリガーします(ネットワーク要求が失敗した場合や、セグをしたくない場合は結果を返します)。 segue 。)