2017-11-04 13 views
0

詳細ビューコントローラーがあり、同じ詳細ビューコントローラーを表示したいが、別のアイテムを表示したい。同じビューコントローラーを別の情報で再読み込みする

var nexttype : Type! 
let nexttypeVC = TypeDetailVC() 


@IBAction func buttonTapped(_ sender: UITapGestureRecognizer) { 

    nexttype = type.Array![0] 
    nexttypeVC.type = next.type 

    self.navigationController?.pushViewController(nexttypeVC, animated: true) 


} 

私は名前やアイテムの識別子を印刷するとき、私は正しいものを得るが、私は、シミュレータを起動したとき、私はエラーを取得します。ラベルとすべての値はゼロです。

ビューコントローラに別のアイテムを再読み込みするように指示するにはどうすればよいですか?

+0

新しいデータを取得していますか? – ivarun

+0

あなたは1つのセルでtableViewを使用し、そこにあなたのビューを設計し、変更のためにそれをリロードすることができます。 –

答えて

-4

同じビューコントローラをナビゲーションスタックにプッシュする代わりに、 UI要素をメソッドに更新するためのすべてのロジックを手配してください。 viewDidLoad()でこのメソッドを呼び出します。 self.viewDidLoad()を呼び出すことはお勧めできません。

observerパターンを使用し、UI要素を更新するメソッドを呼び出します。

+0

ありがとう!出来た! – Maruta

+2

'viewDidLoad'を呼び出さないでください。データに基づいてUI要素を設定し、 'viewDidLoad'と新しいデータをロードするときの両方からその関数を呼び出す関数を作成します。 – Paulw11

+1

viewDidLoad()を呼び出すことは本当に悪い習慣です – OverD

0

pushViewControllerではなくperformSegue(withIdentifier :)を呼び出します。プログラムでセグを登録するか、ストーリーボードで追加する必要があります。次に、prepare(for segue:sender :)を使用して、目的のViewControllerに必要な項目を与えます。宛先のviewDidLoad()は、 prepareForSegueの後にと呼ばれます。

これは、ロード前に必要なデータを宛先ViewControllerに配置するための、Appleが推奨する標準的な方法です。

関連する問題