2014-10-07 23 views
5

我有一個自定義的TableViewController與自定義的TableViewCell。我在Cell的故事板上創建了一個Segue到另一個ViewController來顯示細節,但prepareForSegue從未被調用過。我試過使用didSelectRowAtIndexPath,但它也沒有調用。我懷疑這可能是因爲我動態地創建了自定義單元格,並且他們沒有從分配給他們的故事板中獲得segue,但是我找不到這樣做的方法。我的BarButtonItem中的「newSegue」通常被調用。prepareForSegue沒有從自定義的uitableviewcell調用

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) { 
    println("PREPARE FOR SEGUE") 
    if segue.identifier == "newSegue" { 
     println("PREPARE FOR NEW SEGUE") 
    } else if segue.identifier == "detailSegue" { 
     println("PREPARE FOR DETAIL SEGUE") 
    } 
} 

override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
    println("You selected cell!") 
} 

我懷疑我可能做錯了什麼定義我的自定義單元格時:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let CellIndentifier: NSString = "ListPrototypeCell" 

    var cell : MyTableViewCell = tableView.dequeueReusableCellWithIdentifier(CellIndentifier) as MyTableViewCell 

    var myClass: MyClass = self.myList.objectAtIndex(indexPath.row) as MyClass 

    cell.setCell(author: myClass.author, message: myClass.message) 

    return cell 

} 

任何幫助嗎?

+0

你設置好該代碼所在的表視圖的委託控制器(它應自動設置,如果你的類的UITableViewController的子類)?你有沒有在單元格中看到可能攔截觸摸的意見? – rdelmar 2014-10-07 16:06:35

+0

是的,我把它作爲一個代表。單元格有它的自定義視圖,但我不能從視圖或標籤創建一個segue。 – filipebarretto 2014-10-07 16:52:34

+0

您必須從單元本身進行連接,而不是內容視圖或標籤。如果您無法從畫布中抓取單元格,請轉到左側的場景列表,然後從該單元格中拖出。 – rdelmar 2014-10-07 18:33:59

回答

3

從InterfaceBuilder中的TableViewController中拖出segue,而不是從單元格中拖出。然後,您可以通過performSegueWithIdentifierdidSelectRowAtIndexPath中執行標識符的標識。

還檢查功能簽名。不再需要隱式展開自選的驚歎號:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    performSegueWithIdentifier("mySegue", sender: cell) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
} 
+1

這是一個解決辦法,而不是解決OP的問題。這不會以任何方式工作,因爲OP說didSelectRowAtIndexPath沒有被調用。 – rdelmar 2014-10-07 16:03:44

+0

我也嘗試了這個aproach,但是,因爲我先生,didSelectRowAtIndexPath沒有被調用。單元格在MyTableViewCell.swift中定義。我不知道這是否會導致問題。 – filipebarretto 2014-10-07 16:49:42

+0

您的'didSelectRowAtIndexPath'簽名不正確,因此未被調用。檢查我上面的示例代碼。你必須刪除感嘆號。代碼簽名在Xcode的beta階段和自動代碼完成仍然不正確之間發生了變化。 – zisoft 2014-10-08 07:22:17

相關問題