2014-10-07 21 views
5

Ich habe einen benutzerdefinierten TableViewController mit einer benutzerdefinierten TableViewCell. Ich habe ein Segment auf dem Storyboard von der Zelle zu einem anderen ViewController erstellt, um die Details anzuzeigen, preparedForSegue wird jedoch nie aufgerufen. Ich habe versucht, mit didSelectRowAtIndexPath, aber es auch nicht aufgerufen. Ich nehme an, dass es daran liegt, dass ich die benutzerdefinierten Zellen dynamisch erstelle und sie nicht den Übergang vom ihnen zugewiesenen Storyboard erhalten, aber ich konnte keinen Weg finden, dies zu tun. Der "newSegue" von meinem BarButtonItem wird normal aufgerufen.prepareForSegue nicht von benutzerdefinierten uitableviewcell aufgerufen

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!") 
} 

Ich vermute, ich könnte etwas falsch zu machen, wenn meine benutzerdefinierte Zelle definiert:

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 

} 

Hilfe?

+0

Haben Sie den Regler eingestellt, wo dieser Code als Delegierter der Tabellenansicht befindet (es sollte automatisch eingestellt werden, wenn die Klasse eine Unterklasse von UITableViewController ist)? Haben Sie Ansichten in der Zelle, die die Berührungen abfangen könnten? – rdelmar

+0

Ja, ich habe es als Delegierten festgelegt. Die Zelle verfügt über eine benutzerdefinierte Ansicht, es ist jedoch nicht möglich, aus der Ansicht oder den Beschriftungen einen Übergang zu erstellen. – filipebarretto

+0

Sie müssen eine Verbindung von der Zelle selbst herstellen, nicht von der Inhaltsansicht oder den Beschriftungen. Wenn Sie die Zelle nicht aus der Leinwand greifen können, gehen Sie zur Szenenliste auf der linken Seite und ziehen Sie aus der Zelle dort. – rdelmar

Antwort

3

Ziehen Sie das Segment aus dem TableViewController in InterfaceBuilder, nicht aus der Zelle. Dann können Sie den Abschnitt mit seiner Kennung in didSelectRowAtIndexPath über performSegueWithIdentifier ausführen.

Überprüfen Sie auch die Funktionssignaturen. Die Ausrufezeichen für implizit ausgepackten optionals nicht mehr benötigt werden:

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

Dies ist eine Arbeit, keine Lösung für das OP-Problem. Dies wird nicht funktionieren, da das OP sagte, dass didSelectRowAtIndexPath nicht aufgerufen wurde. – rdelmar

+0

Ich habe diesen Ansatz auch versucht, aber, wie ich sair, der didSelectRowAtIndexPath wird nicht aufgerufen. Die Zelle ist in MyTableViewCell.swift definiert. Ich weiß nicht, ob dies das Problem verursachen könnte. – filipebarretto

+0

Ihre 'didSelectRowAtIndexPath'-Signatur ist falsch und wird daher nicht aufgerufen. Überprüfen Sie meinen obigen Beispielcode. Sie müssen die Ausrufezeichen entfernen. Die Codesignatur hat sich zwischen der Beta-Phase von Xcode geändert und die automatische Code-Vervollständigung ist immer noch falsch. – zisoft

Verwandte Themen