2016-10-02 2 views
1

В моем приложении для тяжелой атлетики у меня есть контроллер представления, который я хочу использовать для нескольких целей. Один из них - выбрать тип подъема, который будет сохранен как пользовательский по умолчанию. Другой - выбрать тип подъема, который будет использоваться для фильтрации журнала лифтов пользователя по типу подъема.Как переходить на один UIViewController из нескольких UIViewControllers, встроенных в разные UINavigationControllers

Один из путей (выбор по умолчанию) начинается с экрана настроек. Когда вы нажимаете UITableViewCell, чтобы перейти к экрану «Выбор подъема», представление перемещается справа налево, как и ожидалось, , однако, оно сразу же переводит вид снова справа налево, а панель навигации указывает обратно, сам:

enter image description here

Вот мой раскадровка раскладка:

enter image description here

Вот соответствующий код Segue:

// MARK: - Segues 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "goToLifts" { 
      let vc = segue.destinationViewController as! LiftSelectionTableViewController 
      vc.delegate = self 
     } else { 
      return 
     } 
    } 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath:NSIndexPath) { 
    switch indexPath.row { 
    case 0: performSegueWithIdentifier("goToFormulas", sender: self) 
    break 
    case 1: performSegueWithIdentifier("goToLifts", sender: self) 
    break 
    default: 
     break 

    } 
    } 

Я использую Swift 2.3 и Xcode 8.

Я прочитал документацию от Apple и нашел несколько тем на SO, которые включают множественный VC собирается по одному виртуальному, но они либо дело с прохождением проблем данных или другие вещи.

Может кто-нибудь сказать мне, почему это происходит и как это исправить?

UPDATE:

Сделано изменения, предложенные @vacaWama и теперь она появляется снизу и не навигационной панели:

enter image description here

UPDATE 2:

Исходный код .storyboard превысил лимит, поэтому вот ссылка на него на GitHub:

Link to storyboard file

+1

Я подозреваю, что вы подключили свой сеанс из ячейки прототипа, поэтому он запускается, когда вы выбираете ячейку, и второй раз, когда вы вызываете 'performSegueWithIdentifier'. Если вы хотите запрограммировать segue программно, подключите его к значку viewController в верхней части таблицы TableViewController. – vacawama

+0

Подключается ли с экрана 'settings-> Lifts' к экрану 'select lift type'? Является ли ячейка «Лифты» подсвечивается при нажатии на сцену в раскадровке? И я второй, что сказал @vacawama. –

+0

@vacawama, вы подозреваете правильно. Спасибо, что указал на мою новичковую ошибку. Тем не менее, представление теперь представляет собой модально и без панели навигации (см. Мой отредактированный вопрос). На экране «Настройки» я хочу, чтобы он скользил по экрану справа налево, но из экрана журнала я хочу, чтобы он отображался в виде снизу. Я попытался подключить segue к навигационному контроллеру, в который он встроен, но это не изменило ситуацию. Вы знаете, как я могу это исправить? – Jim

ответ

0

Я подозреваю, что вы подключены ваше SEGUE из клетки-прототипа, так что становится срабатывает при выборе ячейки, и второй раз, когда вы звоните performSegueWithIdentifier. Если вы хотите запрограммировать segue программно, подключите его к значку viewController в верхней части таблицы TableViewController.

@vacawama, вы подозреваете, что правильно. В настоящее время представление представлено модально и без панели навигации (см. Мой вопрос ). На экране «Настройки» я хочу, чтобы он скользил с справа налево, но с экрана журнала я хочу, чтобы он отображал модально со дна. Я попытался подключить segue к контроллеру nav , в который он встроен, но это не помогло. Знаете ли вы, как я могу это исправить ?

Вы должны выбрать SEGUE стрелку в раскадровку, а затем изменить вид Segue в инспекторе Атрибуты для Показать.

Если я использую Показать segue непосредственно на Select a lift type, он толкает справа налево. Если я использую Показать segue до Navigation controller, он представляет собой модно. Перезапустите свой segue и убедитесь, что он идет прямо на viewController, а не на Navigation controller.

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