0

所以我正在编写我的第一个 tvOS 应用程序(目标 C),并在“Focus Engine”中获得了一些乐趣。我的应用程序是一个带有标签栏控制器的 2 页应用程序,在主页上我有几个 UIButtons。在应用程序启动时,如果我隐藏选项卡栏,按钮看起来就像我希望它们全部取消选择,当我向下滑动其中一个 UIButtons 显然获得焦点,并且我可以在我的各个按钮之间滑动,并且在指定数量之后不活动时间我希望它回到他们都没有专注。

当每个 UIButton 获得焦点时,我启动(并重置)一个 NSTimer,我的意图是在 10 秒后移除 UIButton 焦点(这是有充分理由的,这在我的应用程序 / ui 中是有意义的)。

我尝试过发出“UIButton resignFirstResponder”我还尝试将焦点移回隐藏的 TabBar,我什至尝试过“preferredFocusEnvironments”,但我无法让按钮突出显示消失。我也试过循环,虽然按钮将它们全部设置为“userInteractionEnabled = NO”,然后再返回,但按钮保持焦点。我有日志行显示计时器开始并在它到期时触发我的取消焦点方法,但无论我在那里放什么,我似乎都无法让焦点消失。

关于如何从 UIButton 中删除焦点的任何想法,我认为部分问题是我不想将其移动到其他地方。我想删除所有按钮焦点,我认为这是一件不寻常的事情。

提前致谢。

等离子体

4

1 回答 1

-1

我发现了一种方法来做到这一点,它有点原始,但它可以工作并达到预期的效果。

当空闲计时器到期时,我在 0,0 创建一个 UIButton(自定义类型),它是 1px 高和屏幕的宽度。然后我告诉视图它需要更新焦点,并更新焦点。这会将焦点从任何主要按钮和屏幕顶部的 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 按钮不再可选择,因为未启用!我不得不使用自定义按钮类型,因为系统按钮类型在屏幕顶部显示一条白线并污染了我的标签。

等离子体

于 2019-02-21T09:34:32.867 回答