2015-12-30 2 views
0

У меня есть приложение tvOS с UITabBarController в качестве основной точки входа для основной раскадровки. Если пользователь не вошел в систему, то UITabBarController представляет LoginViewController.Кнопка «Разрешить» для выхода из приложения tvOS при нажатии на представленном модульном контроллере просмотра

Когда пользователь нажимает кнопку «Меню» на пульте Siri, система автоматически отклоняет LoginViewController и показывает UITabBarController. Я хочу, чтобы приложение вместо этого вышло на изголовье tvOS.

Ожидайте решения, которые включают либо UITapGestureRecognizer, чтобы переопределить действие кнопки меню, либо переопределить pressesBegan/pressesTouched, но я пока не нашел решение.

+0

Заканчивать [этот вопрос] (http://stackoverflow.com/q/34335505/2108547) и [этот вопрос] (HTTP: // StackOverflow .com/д/34358073/2108547). –

+0

Эти ответы используют частный API –

ответ

4

Это следующий фрагмент кода работает, и приемлемое поведение на основе ожидаемого поведения для кнопки меню в яблоках HIG for Remotes and Interactions

override func viewDidLoad() { 
    super.viewDidLoad() 

    let tapRecognizer = UITapGestureRecognizer(target: self, action: "tapped") 
    tapRecognizer.allowedPressTypes = [NSNumber(integer: UIPressType.Menu.rawValue)]; 
    self.view.addGestureRecognizer(tapRecognizer) 
} 

func tapped() { 
    exit(EXIT_SUCCESS) 
} 
+1

Хотя это «работает», Apple не приветствует выход из программы https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/StartingStopping.html –

+1

@RicSantos имейте в виду, что ссылка, которую вы предоставили, касается iOS, а не tvOS. Если вы посмотрите на [Remote and Interactions HIG] (https://developer.apple.com/tvos/human-interface-guidelines/remote-and-interaction/), то для tvOS вы заметите, что ожидаемое поведение в приложении для кнопки меню «Возврат к предыдущему экрану». И «Выход на главный экран Apple TV». –

+0

Вот правильная страница удаленного HIG: https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/ –

1

У меня была очень похожая ситуация, это выглядело так:

   +--------------------+ 
     ------>| MainViewController | 
       +--------------------+ 
         | 
      +-------------+-------------+ 
      |       | 
      v       v 
+---------------------+  +--------------------+ 
| LoginViewController |  | HomeViewController | 
+---------------------+  +--------------------+ 

Если представлены LoginViewController или HomeViewController, тогда я хочу, чтобы кнопка меню отклонила приложение и вернулась к главному экрану телевизора, не - MainViewController.

После многого поиска в Google, я решил использовать это решение и, похоже, работает нормально, не вызывая предупреждения или требуя вызова exit.

class MainViewController: UIViewController { 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     super.prepare(for: segue, sender: sender) 
     UIApplication.shared.keyWindow?.rootViewController = segue.destination 
    } 
} 

Надеется, что это полезно для кого-то там

+0

Это должен быть признанный ответ. –