Выберите segue в зависимости от состояния - PullRequest
0 голосов
/ 16 мая 2019

Я хочу выбрать последовательность для моих ячеек UITableVieController в зависимости от того, совпадают ли данные для строки.У меня есть 2 segues в настоящее время (только один из клетки, так как это максимум, что я мог сделать), но я не могу заставить его работать.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    let indexPath = self.tableView.indexPathForSelectedRow
    let free = allAlbums[indexPath!.row].free

    if free == "1"
    {

        if segue.destination is CaseViewController
        {
            let vc = segue.destination as? CaseViewController


            vc?.title = allAlbums[indexPath!.row].title
        }
    }
    else {
    }
}

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {

    if identifier == "caseDetail" {
        let indexPath = self.tableView.indexPathForSelectedRow
        let free = allAlbums[indexPath!.row].free
        if free == "1"
        {
            self.performSegue(withIdentifier: "caseDetail", sender: self)
        }
        else {
            self.performSegue(withIdentifier: "paidCase", sender: self)
        }
    }

    return true
}

По сути, значение «free» ячейки равно 1, тогда она должна перейти к одному контроллеру представления, иначе она перейдет к другому.

1 Ответ

1 голос
/ 16 мая 2019

Не делайте performSegue внутри shouldPerformSegue, вам нужно проверить значение, прежде чем вы выполните исполнение, и действуйте соответствующим образом, так как это вызовет рекурсивные вызовы, так как performSegue будет вызывать shouldPerformSegue снова и бесконечно

Вам нужно разместить это внутри didSelectRowAt

let free = allAlbums[indexPath.row].free
if free == "1"  {
  self.performSegue(withIdentifier: "caseDetail", sender: self)
}
else {
   self.performSegue(withIdentifier: "paidCase", sender: self)
}

с подключением источника перехода к самому виртуальному каналу, а не к клетке

...