2016-11-12 4 views
1

私はUITableViewを持つアプリケーションをコーディングしています。私は現在、このような表のセルのセグを設定しています:didSelectRowatIndexPathの位置に基づいて配列からアイテムを表示する方法は?

var selectedRow = Int() //global variable so it can be used in both VCs 
import UIKit 
class TableViewController: UITableViewController { 
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     performSegue(withIdentifier: "rowSelected", sender: Any?.self) 
     selectedRow = indexPath.row 
    } 
} 

セグはうまくいきます。しかし、viewController(ラベルのテキストを変更するためにのみ使用される)を制御する迅速なファイルでは、適切に動作しません。私は最初のセルをヒットした場合infoArrayには、正しく設定されていますが、ラベルは常に正しいテキストに変更されていない

override func viewDidLoad() { 
     super.viewDidLoad() 
     firstLabel.text = infoArray[selectedRow] 
     print(selectedRow) 
    } 

...一貫性のない数字を返しselectedRow印刷...:ここではそのVCからのコードがあります時々0を返しますが、1、3、2なども返します。ランダムで、現在のintを正しく返していない(したがって、ラベルテキストが正しく設定されていません)。どうしてこれなの?

答えて

4

ではなく、の情報を1つのView Controllerから別のView Controllerに渡す方法です。情報を渡すには、の情報を渡します。情報をグローバルにドロップする代わりに、prepare(for:sender:)を実装して、Segueの宛先ビューコントローラを準備し、宛先ビューコントローラのプロパティを設定することができます。

+0

私は 'prepare(for:)'ビットがどのように機能するのか理解しています...最初の質問で使用したのと同じセグを特定するだけです。しかし、目的のVCの配列に適切なインデックスを選択するために使用する適切な整数を設定できるようにするには、どのように 'sender:'を使うのですか? –

+0

これは、「送信者」のためではありません。あなたは 'nil'のままにしておくことができます。あなたはまだあなた(最初のビューコントローラ)であるため、適切な整数が何であるかを知っています。あなたは_this_viewコントローラのプロパティにその情報を入れることができます。つまり、同じView Controllerのメソッド間で情報を共有する方法です。見える?それはすべての先を計画することです。このビューコントローラ内でこの情報を共有する必要があるので、このビューコントローラにはプロパティがあります。他のView Controllerとプロパティを共有するように、他のView Controllerと共有する必要があることがわかります。 – matt

+0

さらに良いことに、テーブルビューに尋ねるだけです。 – matt

関連する問題