2016-10-04 9 views
1

私のアプリでは、同じTableViewControllerを複数回押す必要があります。ユーザーがdidSelectをタップすると、同じコントローラをナビゲーションスタックにプッシュする必要があります。同じTableViewControllerをナビゲーションスタックに複数回プッシュ

私のアプリはファイルマネージャーアプリであり、ftpサーバーに接続し、ユーザーの中身を表示します。しかし、フォルダ内には、より多くのフォルダ(無限)を含むフォルダが存在する可能性があります。

私はストーリーボードにTableViewControllersの多くを作成することはできませんし、私はこれをナビゲーションスタックに同じコントローラをプッシュしようとすると、このために

navigationController?.pushViewController(self, animated: true) 

私はエラーを取得するには、私は同じコントローラをプッシュすることはできませんと言っていますnavスタック。 だから私は私のコントローラの新しいインスタンスを作成し、このようにプッシュしよう:識別子でセルをデキュー

」できないFolderCell:

let newMyTableVC = MyTableVC() navigationController?.pushViewController(newMyTableVC, animated: true)

しかし、これで、私もエラーはそれが言います - 識別子のペン先やクラスを登録するか、ストーリーボードにプロトタイプセルを接続する必要があります '

このエラーから私の最初のTableViewController私の細胞の識別子とそれは記憶にあります。私は、同じセル識別子を持つ私のTableViewControllerの新しいインスタンスを渡そうとすると、セルがすでに同じ識別子で存在するため、クラッシュします(私は間違っているかもしれません)。

If i am on right track doing this with approach at the above { 
    How do i reuse cells with dynamic identifier and provide data to them. 
} else { 
    How do i accomplish what i want? 
    } 

ありがとうございます。

+0

はなぜ新しいコントローラを毎回作成していないだけで、現在のものと一致するデータセットを変更しますディレクトリ?その後、TableViewのreloadData()機能を使用しますか? – Guardanis

+1

それは完全に良いアプローチです。テーブルビューコントローラにストーリーボードIDを与え、self.storyboard instantiateViewControllerWithIdを使用してインスタンス化します。 – danh

+0

お返事ありがとうございました。新しいネットワーク要求を待ち、tableViewを再ロードすることなく、最後のフォルダビューコントローラからキャッシュに戻ることができるようにするために、毎回新しいコントローラを作成する必要があります。また、新しいView Controllerをナビゲーションスタックにプッシュするのではなく、ユーザーがセルをタップしてデータをリロードすると、ユーザーエクスペリエンスが悪くなります。 –

答えて

1

あなたはこのような新しいインスタンスを作成する場合:

let newMyTableVC = MyTableVC() 

を、それはストーリーボードの非常に独立しています。重要なのは、ストーリーボードに定義されているプロトタイプのセルについては何も知らないことです。したがって、エラーの適切なビットは "...またはストーリーボードのプロトタイプセルを接続する"です。

は、この問題を回避するには、ストーリーボードでのあなたのテーブルビューコントローラの識別子を設定し、使用します。

let newMyTableVC = self.storyboard!.instantiateViewControllerWithIdentifier("identifier") as! MyTableVC 
+0

あなたの答えをありがとう、それは完全に動作します。私はこの方法を何度も使ったことがあっても、このように考えたことはありません。これは、私がストーリーボードでView Controllerのインスタンスが必要なときに使うべきアプローチですか? –

+1

@YasinNazlıcanはい、ストーリーボードからデザインとレイアウトを使用する場合は、instantiateViewControllerWithIdentifierを使用するか、segueを使用する必要があります。 – pbasdf

関連する問題