Односторонний переход в tvOS

У меня есть приложение Swift3 tvOS, в котором я перехожу от одного ViewController к другому, используя executeSegue(withIdentifier: ...). Во втором ViewController я использую кнопку меню для взаимодействия с пользовательским интерфейсом, используя pressesBegan с press.type == UIPressType.menu.

Это отлично работает, если второй ViewController вводится напрямую (т. е. является ViewController по умолчанию), но с переходом приложение снова показывает первый ViewController при нажатии кнопки меню (меню удваивается, как в tvOS). Мой второй ViewController тоже получает ключ, но результаты пользовательского интерфейса никогда не отображаются, так как второй ViewController исчезает. Я пробовал с разными типами segue, но безрезультатно.

Вопросы:

1) Есть ли способ «потребить» событие клавиши меню, чтобы оно никогда не попадало в ОС?

2) Как вариант, можно как-то сделать "односторонний переход"?

3) Альтернатива 2: Могу ли я программно отменить связь между двумя ViewController'ами? Что делает одного «родителем» другого? Я не использую навигационный контроллер или что-то в этом роде, так что это должно быть переходом.

Спасибо,


person jensk    schedule 17.10.2016    source источник
comment
Вот простая проблема XCode 8, которая показывает проблему: drive.google. com/file/d/0B_LVxY3EYs6EOHRCTFpvZ3IzcG8/   -  person jensk    schedule 18.10.2016
comment
Почему бы вам не использовать UINavigationController?   -  person Roman Podymov    schedule 18.10.2016
comment
Если это сработает, это может быть конец. Я не использовал навигационный контроллер, потому что мне нужно было только перейти от одного VC к другому, а затем оставаться там до конца жизни приложения.   -  person jensk    schedule 19.10.2016


Ответы (1)


Если вы хотите реализовать эту часть приложения без UINavigationController, вы можете просто установить корень UIViewController программно. Прежде всего, добавьте идентификатор раскадровки в ViewController2 в файле Main.storyboard. Затем замените эту часть кода:

performSegue(withIdentifier: "toViewController2", sender: self)

с

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
let secondViewController = mainStoryBoard.instantiateViewController(withIdentifier: "ViewController2") as! ViewController2
appDelegate.window?.rootViewController = secondViewController

После того, как появится первый UIViewController, вы увидите второй UIViewController, и обработчик кнопки меню будет работать так, как вы хотите (без обратного перехода).

person Roman Podymov    schedule 20.10.2016
comment
В итоге я использовал UINavigationController, а затем просто self.navigationController.viewControllers = [self] - person jensk; 21.10.2016