我將數據從表視圖控制器傳遞到詳細視圖。我想直接在我的prepareForSegue
方法使用indexPath.row
,但它顯示的塞戈沒有得到選定的行號
使用未解決的標識符的錯誤「indexPath」
所以,在網上搜索後,我設置的變量indexOfSelectedPerson
這是分配的值爲indexPath.row
。當我在模擬器中運行應用程序時,問題是prepareForSegue獲取的初始值爲indexOfSelectedPerson
(0),然後只有在單擊它後才獲取所選行的值。所以,當我點擊模擬器中的後退按鈕並選擇不同的行時,詳細視圖顯示了我之前選擇的行的信息。
import UIKit
class MasterTableViewController: UITableViewController {
var people = []
var indexOfSelectedPerson = 0
override func viewDidLoad() {
super.viewDidLoad()
people = ["Bob", "Doug", "Jill"]
}
override func numberOfSectionsInTableView(tableView: UITableView?) -> Int {
return 1
}
override func tableView(tableView: UITableView?, numberOfRowsInSection section: Int) -> Int {
return people.count
}
override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell = tableView!.dequeueReusableCellWithIdentifier("personCell", forIndexPath: indexPath) as UITableViewCell
cell.text = "\(people[indexPath.row])"
return cell
}
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!)
{
indexOfSelectedPerson = indexPath.row
}
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if let mySegue = segue.identifier {
if mySegue == "personDetails" {
let detailsVC: DetailTableViewController = segue.destinationViewController as DetailTableViewController
detailsVC.selectedPersonName = "\(people[indexOfSelectedPerson])"
}
}
}
}
因此,選擇道格時,應用程序在模擬器中第一個開始顯示鮑勃的細節,因爲indexPathOfSelectedPerson
0點擊後退按鈕,然後選擇吉爾顯示細節的道格,因爲indexPathOfSelectedPerson
成爲1,當我點擊道格以前的時間。我猜這個問題源於調用方法的順序。
你的添加的行,得到在Xcode關於向下轉換AnyObject錯誤,並建議改變行:讓的selectedIndex = self.tableView.indexPathForCell(發送者作爲的UITableViewCell )。這解決了錯誤。 正如你所說,我改變了indexOfSelectedPerson爲selectedIndex.row,並且一切正常。謝謝。 – Shades
好,我編輯了答案。 – Jack
正是我在找的。在Xcode 7(Swift 2.2)中,您需要強制將發送者轉換爲'UITableViewCell',如下所示: 'self.tableView.indexPathForCell(sender as!UITableViewCell)' –