2016-09-05 3 views
1
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    self.selectedClubState = stateNamesForDisplay[indexPath.row] 
    self.performSegueWithIdentifier ("Cities", sender: self) 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    var clubsToPassToCitiesViewController = [clubObject]() 
    if segue.identifier == "Cities" { 
     for club in clubsForTable{ 
      if club.clubState == self.selectedClubState{ 
       clubsToPassToCitiesViewController.append(club) 
      } 
     } 
     let citiesView = segue.destinationViewController as? citiesViewController 
     citiesView?.clubsForChosenCity = clubsToPassToCitiesViewController 
    } 
} 

Segue выполняется дважды, ведущий к следующему VC. Как я могу предотвратить это?Segue выполняется дважды

ответ

5

Вы являются один выполнение SEGUE дважды - один раз автоматически в раскадровке (потому что ваш переход излучается как Segue действий от клеточного прототипа), и один раз в коде, когда вы говорите self.performSegueWithIdentifier. Если вы не хотите, чтобы segue выполнялся дважды, удалите один из них.

Лично я рекомендую полностью удалить didSelectRow и переместить self.selectedClubState в prepareForSegue.

2

Удалить текущий segue в раскадровке. Затем CTRL-перетащите с viewController (а не на ячейку) в контроллер следующего вида и назовите его «Города». Теперь, когда Вы выбираете ячейку, то didSelectRowAtIndexPath() будет стрелять первым и будем называть performSegueWithIdentifier()

enter image description here

Однако, если все, что вы хотите сделать в didSelectRowAtIndexPath() это получить строку, выполнивший SEGUE, вы можете сохранить исходную настройку имея SEGUE клеток из раскадровки, удалите didSelectRowAtIndexPath() и prepareForSegue() сделать:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let indexPath = self.tableView.indexPathForSelectedRow { 
     self.selectedClubState = stateNamesForDisplay[indexPath.row] 
    } 
    var clubsToPassToCitiesViewController = [clubObject]() 
    if segue.identifier == "Cities" { 
     for club in clubsForTable{ 
      if club.clubState == self.selectedClubState{ 
       clubsToPassToCitiesViewController.append(club) 
      } 
     } 
     let citiesView = segue.destinationViewController as? citiesViewController 
     citiesView?.clubsForChosenCity = clubsToPassToCitiesViewController 
    } 
} 
+0

Благодаря @Shades я просто должен был удалить свой SEGUE из ячейки и перетащите один из раскадровки! – Chris

+1

@Chris вы должны отметить это как ответ –

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