从 tvOS 中的 UIButton 移除焦点
Remove focus from UIButton in tvOS
所以我正在编写我的第一个 tvOS 应用程序 (Objective C),并且在 "Focus Engine" 上玩得很开心。我的应用程序是一个带有选项卡栏控制器的 2 页应用程序,在主页上我有一些 UIButtons。在应用程序启动时,如果我隐藏标签栏,按钮看起来就像我希望它们全部取消选择,当我向下滑动其中一个 UIButtons 时显然获得焦点,并且我可以在我的各种按钮之间滑动,并且在指定数量之后不活动时间我希望它回到他们都没有集中注意力。
我在每个 UIButton 获得焦点时启动(并重置)NSTimer,我的目的是在 10 秒后移除 UIButton 焦点(这是有充分理由的,这在我的应用程序中很有意义/ ui).
我试过 issuing a "UIButton resignFirstResponder" 我也试过将焦点移回隐藏的 TabBar,我什至试过 "preferredFocusEnvironments" 但我无法获得按钮突出显示。我还尝试循环通过按钮将它们全部设置为 "userInteractionEnabled = NO" 然后再次返回但按钮保持焦点。我有显示计时器开始的日志行,它会在它到期时触发我的非焦点方法,但无论我在那里放什么,我似乎都无法让焦点消失。
关于如何将焦点从 UIButton 移开的任何想法,我认为部分问题是我不想将它移到其他地方。我想删除所有按钮焦点,我想这是一件不寻常的事情。
提前致谢。
等离子
我发现了一种方法,它有点原始,但它有效并达到了预期的效果。
当空闲计时器到期时,我在 0,0 处创建一个 1px 高和屏幕宽度的 UIButton(自定义类型)。然后我告诉视图它需要焦点更新,并更新焦点。这会将焦点从任何主要按钮转移到屏幕顶部的 1px 高按钮。
[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' 来了解我的 1px 按钮何时获得焦点并将该按钮设置为禁用。
if(context.nextFocusedView.tag == 99){
NSLog(@"Focus Button Has Focus");
focusButton.enabled = NO;
}
这会将焦点留在该按钮上,该按钮允许某人向下滑动以到达主按钮,或向上滑动以到达标签栏,一旦他们将其滑动离开,1px 按钮将不再可选,因为未启用!我不得不使用自定义按钮类型,因为系统按钮类型在屏幕顶部显示一条白线并污染了我的标签。
等离子
所以我正在编写我的第一个 tvOS 应用程序 (Objective C),并且在 "Focus Engine" 上玩得很开心。我的应用程序是一个带有选项卡栏控制器的 2 页应用程序,在主页上我有一些 UIButtons。在应用程序启动时,如果我隐藏标签栏,按钮看起来就像我希望它们全部取消选择,当我向下滑动其中一个 UIButtons 时显然获得焦点,并且我可以在我的各种按钮之间滑动,并且在指定数量之后不活动时间我希望它回到他们都没有集中注意力。
我在每个 UIButton 获得焦点时启动(并重置)NSTimer,我的目的是在 10 秒后移除 UIButton 焦点(这是有充分理由的,这在我的应用程序中很有意义/ ui).
我试过 issuing a "UIButton resignFirstResponder" 我也试过将焦点移回隐藏的 TabBar,我什至试过 "preferredFocusEnvironments" 但我无法获得按钮突出显示。我还尝试循环通过按钮将它们全部设置为 "userInteractionEnabled = NO" 然后再次返回但按钮保持焦点。我有显示计时器开始的日志行,它会在它到期时触发我的非焦点方法,但无论我在那里放什么,我似乎都无法让焦点消失。
关于如何将焦点从 UIButton 移开的任何想法,我认为部分问题是我不想将它移到其他地方。我想删除所有按钮焦点,我想这是一件不寻常的事情。
提前致谢。
等离子
我发现了一种方法,它有点原始,但它有效并达到了预期的效果。
当空闲计时器到期时,我在 0,0 处创建一个 1px 高和屏幕宽度的 UIButton(自定义类型)。然后我告诉视图它需要焦点更新,并更新焦点。这会将焦点从任何主要按钮转移到屏幕顶部的 1px 高按钮。
[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' 来了解我的 1px 按钮何时获得焦点并将该按钮设置为禁用。
if(context.nextFocusedView.tag == 99){
NSLog(@"Focus Button Has Focus");
focusButton.enabled = NO;
}
这会将焦点留在该按钮上,该按钮允许某人向下滑动以到达主按钮,或向上滑动以到达标签栏,一旦他们将其滑动离开,1px 按钮将不再可选,因为未启用!我不得不使用自定义按钮类型,因为系统按钮类型在屏幕顶部显示一条白线并污染了我的标签。
等离子