Удалить фокус с UIButton в tvOS
Итак, я пишу свое первое приложение для tvOS (Objective C) и получаю удовольствие от "Focus Engine". Мое приложение представляет собой двухстраничное приложение с контроллером панели вкладок, на главной странице у меня есть несколько кнопок UIB. При запуске приложения, если я скрываю панель вкладок, кнопки выглядят так, как будто я хочу, чтобы они были сняты со всех, когда я провожу пальцем одну из кнопок UIB, очевидно, получаю фокус, и я могу перемещаться между различными кнопками и после указанного количества времени бездействия, я хочу, чтобы это вернулось к тому, что все они не сфокусированы.
Я запускаю (и сбрасываю) NSTimer, когда каждый UIButton получает фокус, и мое намерение состоит в том, чтобы удалить фокус UIButton, скажем, через 10 секунд (для этого есть веская причина, и это имеет смысл в моем приложении / интерфейсе пользователя).
Я пытался выдать "UIButton resignFirstResponder". Я также пытался переместить фокус обратно на скрытую панель TabBar, я даже пробовал "favourFocusEnvironments", но не могу заставить подсветку кнопки исчезнуть. Я также попытался покататься на велосипеде, хотя кнопки устанавливали их все в "userInteractionEnabled = NO", а затем снова, но кнопка сохраняет фокус. У меня есть строки журнала, показывающие запуск таймера, и он запускает мой метод не-фокуса, когда он истекает, но независимо от того, что я вставил туда, я не могу заставить фокус исчезнуть.
Любые идеи о том, как убрать фокус с UIButton, я думаю, что часть проблемы в том, что я не хочу переносить это куда-то еще. Я хочу удалить весь фокус кнопки, что, как мне кажется, является необычной вещью.
Заранее спасибо.
плазма
1 ответ
Я нашел способ сделать это, это немного примитивно, но он работает и достигает желаемого эффекта.
Когда таймер простоя истекает, я создаю UIButton (пользовательский тип) с 0,0, что составляет 1 пиксель в высоту и ширину экрана. Затем я говорю представлению о необходимости обновления фокуса и обновления фокуса. Это берет фокус с любой из основных кнопок и до моей кнопки 1px high вдоль верхней части экрана.
[focusButton removeFromSuperview];
CGRect frame = CGRectMake(0,0,(self.view.frame.size.width),1);
focusButton = [UIButton buttonWithType:UIButtonTypeCustom];
focusButton.frame = frame;
focusButton.tag = 99;
[self.view addSubview:focusButton];
[self.view setNeedsFocusUpdate];
[self.view updateFocusIfNeeded];
Затем я использую didUpdateFocusInContext, чтобы узнать, когда моей кнопке в 1 пиксель был сделан фокус, и отключил ее.
if(context.nextFocusedView.tag == 99){
NSLog(@"Focus Button Has Focus");
focusButton.enabled = NO;
}
Это оставляет фокус на этой кнопке, которая позволяет кому-то провести пальцем вниз, чтобы перейти к основным кнопкам, или вверх, чтобы перейти к панели вкладок, после того, как они проведут по ней, кнопка 1px больше не выбирается, потому что не включена! Мне пришлось использовать пользовательский тип кнопки, потому что системный тип кнопки показывал белую линию поверх экрана и портил мои ярлыки.
плазма