2016-11-12 51 views
1

我正在編寫一個具有UITableView的應用程序。我目前已經爲表格中的單元設置了一個segue設置:如何根據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 
    } 
} 

segue正常工作。但是,在控制viewController(僅用於更改標籤文本)的swift文件中無法正常工作。下面是從VC代碼:

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

的infoArray設置正確,但標籤並不總是更改爲正確的文字...印刷selectedRow返回不一致的數字......如果我打的第一個單元格它有時會返回0,但它也會返回1,3,2等等。它似乎是隨機的,並且不正確地返回當前的int(因此標籤文本設置不正確)。爲什麼是這樣?

回答

4

你在做什麼是而不是將信息從一個視圖控制器傳遞到另一個視圖控制器的方式。通過信息,通過的信息。不要將信息放在全局中,請執行prepare(for:sender:),您可以在其中準備好segue的目標視圖控制器,並設置目標視圖控制器的屬性。

+0

我明白'prepare(for:)'是如何工作的......只是確定了我在最初的問題中使用過的同一個segue。但是,如何利用'sender:'來設置合適的整數來爲目標VC中的數組選擇正確的索引? –

+0

這不是'發件人'的用途。你可以把它留在'nil'。你知道什麼是合適的整數,因爲你仍然是你(第一個視圖控制器)。您可以將這些信息放入_this_視圖控制器的屬性中;那就是你如何在同一視圖控制器的方法之間共享信息。你有看到?這都是未來規劃的問題。你知道你需要在這個視圖控制器中共享這個信息,所以這個視圖控制器有一個屬性。你知道你需要與其他視圖控制器共享它,所以另一個視圖控制器有一個屬性。 – matt

+0

甚至更​​好,只要問表視圖。 – matt

相關問題