2016-07-07 17 views
0

Ich mache eine App, die Informationen über Text innerhalb von Zellen an einen WebViewController sendet mit Swipe-Aktionen. Die Durchzug Aktion:Schlechte Ausnahme bei Swipe-Aktion Zelle Swift

let sendToWebsite = UITableViewRowAction(style: .Default, title: "Website") 
{ (action, indexPath) in 
    self.performSegueWithIdentifier("yourSegueIdentifier", sender: nil) 
} 
    sendToWebsite.backgroundColor = UIColor.blueColor() 
    return [sendToWebsite] 
} 

Dies funktioniert gut, aber ich habe auch zwei segues aus denselben View-Controller kommen, auf zwei anderen VCs. Der erste Abschnitt (recipeDetail) ist, wenn Sie direkt auf die Zelle tippen und funktioniert gut, aber der zweite Abschnitt (yourSegueIdentifier) ​​ist eine Schaltfläche, die angezeigt wird, wenn Sie die Folie Aktion auf der Zelle aktivieren und nicht funktioniert. Cell Swipe Action

die segues:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if (segue.identifier == "recipeDetail") { 
     let indexPath = self.tableView!.indexPathForSelectedRow 
     let destinationViewController: DetailViewController = segue.destinationViewController as! DetailViewController 

     destinationViewController.recipe = recipes[indexPath!.row] 
    } 
    else if segue.identifier == "yourSegueIdentifier" 
    { 
     let indexPath = self.tableView!.indexPathForSelectedRow 
     let nextVC: WebViewController = segue.destinationViewController as! WebViewController 

     nextVC.recipe = recipes[indexPath!.row] 
    } 
} 

Auf der Linie

nextVC.recipe = recipes[indexPath!.row] 

indexPath als Null herauskommen wird, und geben Sie die folgende Fehlermeldung error on line 13

+0

indexPathForSelectedRow ist null zurückkehrt, wahrscheinlich, weil Ihre Zeile nicht in einem ausgewählten Zustand befindet. Ist die Auswahl in der Tabellenansicht aktiviert? Haben Sie die Delegatmethode didSelectRowAtIndexPath implementiert? Wenn Sie die Zeile durchziehen, wird sie nicht automatisch in einen ausgewählten Zustand versetzt. – SArnab

Antwort

1

Nun, es wie auf dem Streichen sieht action registriert die tableView die Methode "indexPathForSelectedRow" nicht. Was Sie könnten alternativ tun, ist das Einrichten eines globalen swipeIndex Variable

class ViewController: UIViewController{ 

var swipeIndex : Int! 
//Code, code, code... 

und legen Sie es dann, wenn die Swipe-Aktion aufgerufen wird.

let sendToWebsite = UITableViewRowAction(style: .Default, title: "Website") 
{ (action, indexPath) in 
    self.swipeIndex = indexPath.row 
    self.performSegueWithIdentifier("yourSegueIdentifier", sender: nil) 
} 
    sendToWebsite.backgroundColor = UIColor.blueColor() 
    return [sendToWebsite] 
} 

und dann:

else if segue.identifier == "yourSegueIdentifier" 
    { 
     let indexPath = self.tableView!.indexPathForSelectedRow 
     let nextVC: WebViewController = segue.destinationViewController as! WebViewController 

     nextVC.recipe = recipies[self.swipeIndex] 
    } 
} 
+0

Wie sollte ich die swipeIndex-Variable einrichten? – zach2161

+0

Direkt unter Ihrer Klasse ViewController: UIViewController. Einfach hinzufügen: var swipeIndex: Int! –

+0

Bearbeitet die Antwort besser zu erklären :) –