2014-10-07 12 views
5

Ho un TableViewController personalizzato con un TableViewCell personalizzato. Ho creato un seguito sullo storyboard dalla cella a un altro ViewController per visualizzare i dettagli ma prepareForSegue non viene mai chiamato. Ho provato a usare didSelectRowAtIndexPath ma non è nemmeno chiamato. Sospetto che possa essere perché creo le celle personalizzate dinamicamente e non ottengono il seguito dallo storyboard a loro assegnato, ma non sono riuscito a trovare un modo per farlo. Il "newSegue" dal mio oggetto BarButtonItem viene chiamato normalmente.prepareForSegue non chiamato da custom 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!") 
} 

ho il sospetto che potrei fare qualcosa di sbagliato al momento di definire il mio cellulare personalizzato:

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 

} 

Qualsiasi aiuto?

+0

Avete impostato il controller in cui questo codice risiede come il delegato della vista tabella (che dovrebbe essere impostato automaticamente se la classe è una sottoclasse di UITableViewController)? Hai punti di vista nella cella che potrebbero intercettare i tocchi? – rdelmar

+0

Sì, l'ho impostato come delegato. La cella ha la sua vista personalizzata, ma non sono in grado di creare un seguito dalla vista né dalle etichette. – filipebarretto

+0

È necessario connettersi dalla cella stessa, non dalla vista del contenuto o dalle etichette. Se non riesci ad afferrare la cella dalla tela, quindi vai all'elenco delle scene sulla sinistra e trascina dalla cella lì. – rdelmar

risposta

3

Trascinare il passaggio dal TableViewController in InterfaceBuilder, non dalla cella. Quindi è possibile eseguire il seguito con il suo identificatore in didSelectRowAtIndexPath tramite performSegueWithIdentifier.

Controllare anche le firme delle funzioni. non sono più necessari i punti esclamativi per optionals implicitamente da scartare:

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

Questo è un aggiramento, non una soluzione al problema dell'OP. Questo non funzionerà in alcun modo, dal momento che l'OP ha detto che didelectRowAtIndexPath non viene chiamato. – rdelmar

+0

Ho anche provato questo approccio, ma, come ho detto, il didSelectRowAtIndexPath non viene chiamato. La cella è definita su MyTableViewCell.swift. Non so se questo potrebbe essere la causa del problema. – filipebarretto

+0

La tua firma 'didSelectRowAtIndexPath' non è corretta, quindi non viene chiamata. Controlla il mio codice di esempio qui sopra. Devi rimuovere i punti esclamativi. La firma del codice è cambiata tra la fase beta di Xcode e il completamento automatico del codice è ancora errato. – zisoft

Problemi correlati