2015-09-19 3 views
5

В соответствии с номером guidelines от Apple нажатие кнопки меню на tvOS должно вернуть вас в предыдущее меню, пока вы не перейдете в верхнее меню, после чего он должен вернуть вас в меню ОС. Мой вопрос: как я могу предотвратить поведение кнопки меню по умолчанию и не возвращать его в меню ОС, но затем активировать его, когда пользователь находится в верхнем меню моего приложения?Переопределение кнопки удаленного меню Apple Siri. Поведение по умолчанию

ответ

16

Вы можете зарегистрировать tapGestureRecognizer и установить allowedPressTypes = UIPressTypeMenu код следующим образом:

UITapGestureRecognizer *tapGestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; 
tapGestureRec.allowedPressTypes = @[@(UIPressTypeMenu)]; 
[self.view addGestureRecognizer:tapGestureRec]; 

Тогда всякий раз, когда Siri пульты кнопки меню нажимается ваш метод handleTap будет называться, что позволяет добавить любую пользовательскую логику вам нужно. Просто имейте в виду, что блокировка кнопки меню от приостановки приложения на контроллере корневого представления может быть причиной отказа App Store.

Дополнительную информацию о выявлении жестов here и о прессеTtyes here.

+0

простой акт добавив его признаваемых жесты зрения не остановит ли от выполнения его поведение по умолчанию? – mredig

+1

Да, это то, что я использую в своем приложении, оно будет вызывать ваш предоставленный селектор, когда когда-либо будет нажато MenuButton, так что теперь вам нужно, что вы делаете с этим ... –

+0

Я добавил tapgesture на AVPLayerViewController, но жест кнопки меню не вызов в tvos. – vipulk617

2

Это поведение вы можете получить бесплатно, используя UINavigationController.

В общем случае контроллер представления контейнера может использовать метод делегата -gestureRecognizerShouldBegin:, чтобы разрешить или запретить начало распознавания жестов нажатия кнопки меню, начиная с того, находится ли он на корневом уровне вложенности или нет. Когда общий UIApplication экземпляр получит необработанную кнопку меню, она сообщит системе, что приведет к отправке приложения на задний план.

6

Быстрая версия ответа @ C_X, которая работала для меня.

let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:") 
tapGesture.allowedPressTypes = [NSNumber(integer: UIPressType.Menu.rawValue)] 
self.view.addGestureRecognizer(tapGesture) 

Swift 3 версия:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(MyClass.handleMenuPress(_:))) 
tapGesture.allowedPressTypes = [NSNumber(value: UIPressType.menu.rawValue)] 
self.view.addGestureRecognizer(tapGesture) 
+0

Я работаю над приложением Apple TV. Это приложение основано на воспроизведении видео. Мое требование заключается в том, что когда пользователь приостанавливает видео и нажимает кнопку меню, воспроизведение видео непрерывно. Я хочу, чтобы в режиме видео паузы пользователь нажимал кнопку меню, а затем экран перенаправлялся на предыдущий экран без воспроизведения видео. –

+0

В вашей функции _handleTap_ вы можете вывести текущий VC из стека. – Individual11

+0

Красивое, лаконичное решение. Добавлен синтаксис для Swift 3. –

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