tvOS:强制使一个按钮获得焦点

10

我有一个带有按钮的UIView,需要在将视图添加到self.view时设置焦点在按钮上,但是当视图被添加时,我不知道为什么按钮没有获得焦点!

 - (void)didUpdateFocusInContext:(UIFocusUpdateContext *)context withAnimationCoordinator: (UIFocusAnimationCoordinator *)coordinator {



         if (context.nextFocusedView == backButton) {

             [UIView animateWithDuration:1 delay:0 usingSpringWithDamping:.40 initialSpringVelocity:.60 options:UIViewAnimationOptionAllowUserInteraction animations:^ {

                 context.nextFocusedView.transform = CGAffineTransformMakeScale(1.5, 1.5);
                 context.nextFocusedView.layer.shadowOffset = CGSizeMake(0, 10);
                 context.nextFocusedView.layer.shadowOpacity = 1;
                 context.nextFocusedView.layer.shadowRadius = 15;
                 context.nextFocusedView.layer.shadowColor = [UIColor redColor].CGColor;
                 context.nextFocusedView.layer.shadowOpacity = 1;

             } completion:nil];


         }

}

我还尝试了其他属性:

- (void)openView {

        [backButton preferredFocusedView];
        [backButton canBecomeFocused];
        [backButton setNeedsFocusUpdate];

       [self.view addSubView:customView];
}

- (UIView *)preferredFocusedView {

       return [backButton preferredFocusedView];   
}

但是这些都没有起作用!


1
你的问题涉及到tvOS,而不是iOS或Xcode。在提问时只使用相关标签。 - rmaddy
@rmaddy iOS和Xcode标签更有可能被查看!而tvOS只有200个标签,请不要编辑我的问题。 - iOS.Lover
2
你不是为了获得更多的浏览量而打标签。你打标签是为了让具有相关知识的人看到你的问题。你的问题与iOS或Xcode无关。使用错误的标签有什么意义呢?当然,你可能会获得更多的浏览量,但这些额外的浏览量来自那些可能没有所需知识的人。按照你的逻辑,你还应该添加Java和Android标签。这样也会给你带来更多的浏览量。 - rmaddy
@rmaddy,tvOS基本上就是iOS,而且tvOS和iOS具有相同的语法。Xcode是我正在使用的工具!所以它们彼此相关,而不是给出一些解决方案,你却打扰了人们。 - iOS.Lover
请阅读Xcode标签的描述。您的问题与实际使用Xcode无关。您使用的IDE与您的问题无关。而且,尽管iOS和tvOS可能有一些相似之处,但它们并不相同。顺便说一句 - 我没有打扰任何人。我纠正了您的标签,而您把它们放回去了。因此,我花时间向您解释了这个网站的工作原理。这是为了帮助您。 - rmaddy
我想知道这个问题与Cocoa APIs有什么关系? - El Tomato
3个回答

7
假设您有一个UIViewController,其中包含一个backButton属性(一个UIButton)。此按钮已正确设置,并位于ViewController视图的可见边界内。它还应该为UIControlEventPrimaryActionTriggered事件定义了一个操作。
如果您希望在显示UIViewController视图时将焦点放在按钮上,请将该按钮返回给preferredFocusedView:。
- (UIView *)preferredFocusedView {
   return self.backButton;
}

但如果您希望它集中在视图生命周期或用户流程的不同时间,您需要使用不同的方法。

例如,如果您想在任意时间使按钮成为焦点:确保该按钮通过preferredFocusedView返回,然后在焦点上下文(在简单情况下,即视图控制器)中调用setNeedsFocusUpdate。


4

这应该可以工作。

- (UIView *)preferredFocusedView {

       return backButton;   
}

不要返回 [backButton preferredFocusedView],直接返回 backButton。


0

您需要从preferredFocusView中返回您想要聚焦的视图,并调用setNeedsFocusUpdate以便焦点系统将焦点转移至该视图。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接