2016-03-20 2 views
4

код откроет первый ViewController и она отлично работает:performSegueWithIdentifier для didSelectRowAtIndexPath и IBAction

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.performSegueWithIdentifier("openDates", sender: self.dates[indexPath.row]) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    let tasksViewController = segue.destinationViewController as! TasksViewController 
    tasksViewController.selectedList = sender as! Dates 
} 

Этот код открывает второй ViewController, но он не работает: сообщение

@IBAction func ShowDetails(sender: UIBarButtonItem) { 
    self.performSegueWithIdentifier("openDetails", sender: sender) 
} 

Ошибка:

Не удалось присвоить значение типа dante.DetailsViewController (0x10b60b2e0) в dante.TasksViewCont ролик "(0x10b60adc0).

ответ

3

Вы вызываете два отдельных перетекает и используя тот же самый код в prepareForSegue для обоих, а это означает, что вы пытаетесь бросить два отдельных контроллеров отображения к одному контроллеру представления. Измените свой код на:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "openDates" { 
     let tasksViewController = segue.destinationViewController as! TasksViewController 
     tasksViewController.selectedList = sender as! Dates 
    } 
    else if segue.identifier == "openDetails" { 
     let detailsViewController = segue.destinationViewController as! DetailsViewController 
     // Do stuff 
     // If you're not doing stuff, remove this else if block 
     // The if statement will still catch and prepare the other segue 
    } 
} 
+0

это работает. Спасибо!! – alexey

Смежные вопросы