2017-10-22 5 views
0

あなたは私の方法をチェックして、いくつかのアドバイスをくれ渡すデータテーブルビューのセル

だから、私が埋め込まれたナビゲーションを与えることができますしてください、私はテーブルビューとの間で通信を行うためにしようとしていると、それは詳細ビュー

だをタップすることで、コントローラからテーブルビュー

と私はtableview(_:didSelectedRowAt)メソッドを使用しませんでした。

stackoverflowの中にいくつかの回答、それらはprepare(:)メソッドをオーバーライドしtableview(_:didSelectedRowAt)

performSegue(withIdentifier:)方法を記述前記しかし、私は2つの画面が示された上方のようなコードを書く場合。

(セグエアクションが二回トリガされるので、私は思う)

私はちょうどこのセグエアクションを使用してテーブルビューセル(フレンド名セル)

から詳細ビューにセグエアクション(プッシュ)をドラッグ&ドロップ私は、詳細ビュー

で選択された友人の名前を編集するためのprepare(:segue)方法でデータを渡すことができると私は、詳細ビューのテキストフィールドから友人の名前を編集した場合、アンワインドセグエ

をトリガー editボタンがあります

ので、私は詳細ビューコントローラに

prepare(:segue)メソッドをオーバーライドして、表ビューのViewControllerを

@IBAction func getEditedNameFromDetailView(_ sender:UIStoryboardSegue){ 
    if sender.source is DetailViewController { 
     if let senderVC = sender.source as? DetailViewController { 
      data[(self.someTableView.indexPathForSelectedRow?.row)!] = senderVC.editedData! 
     } 
     someTableView.reloadData() 
    } 
} 

に以下のコードを書いたが、これはテーブルビューとその詳細ビューを通信するための適切な方法は何ですか?

答えて

1

あなたの説明から2つのセグがある可能性があります。 StoryBoardに1つ、あなたのコードに1つ。

準備メソッドがセグを実行していません。セグに関連するアクションを実行するチャンスが与えられます。たとえば、デスティネーションコントローラーにデータを渡すことができます。 StoryBoardにすでに作成している場合はsegueを実行しないでください。またその逆もあります。 -

  • あなたが行う呼び出しからデータを渡すために、送信者のオブジェクトを使用することができます

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
         //get the destination controller and cast it to your detail class 
         if let destinationController = segue.destination as? YourDetailClassHere { 
          //set the properties you want 
          destinationController.someProperty = someValue 
         } 
        } 
    

    ほとんどのノート:

    準備の一般的な使い方は次のようになります。

  • よくある間違いは、宛先コントローラが常に詳細コントローラであると仮定することです。ナビゲーションコントローラにすることができますし、ナビゲーションコントローラから詳細を抽出する必要があります。
関連する問題