3

我正在为 tvOS 申请。我有一个包含 a 的视图UIButton和一个UIView包含其他几个自定义视图的自定义视图。模拟器只能突出显示UIButton而不是自定义视图。

根据Building Apple TV Apps Docs

如果您的自定义视图需要可聚焦,请覆盖 canBecomeFocused 以返回 YES(默认情况下,它返回 NO)。

根据canBecomeFocused Docs

canBecomeFocused 将返回

如果视图可以聚焦,则为 YES;否,否则。

但是,尝试通过执行以下操作将 YES 分配给 canBecomeFocused:

self.customView.canBecomeFocused = YES;

给出这个错误:

No setter method 'setCanBecomeFocused:' for assignment to property

我该如何做到这一点?

4

3 回答 3

8

看起来像是UIView声明了函数/属性。

您是否尝试过像这样覆盖该功能?

迅速

override func canBecomeFocused() -> Bool {
    return true
}

Objective-C

- (BOOL)canBecomeFocused {
    return YES;
}

我还没有尝试过,但它可能对你有用。

于 2015-09-24T17:40:51.127 回答
4

canBecomeFocused除了在您的自定义视图中覆盖该方法:

override func canBecomeFocused() -> Bool {
    return true
}

确保您的自定义视图userInteractionEnabled是真实的。这是确保您的视图可以聚焦的完整列表:

为什么这个视图不能聚焦?

预期可聚焦的视图可能无法聚焦的原因有很多,包括(但不限于):

  • 视图的 canBecomeFocused 方法返回 NO。
  • 视图的 hidden 属性的值为 YES。
  • 视图的 alpha 属性值为 0。
  • 视图的用户交互被禁用。
  • 该视图被其顶部的另一个视图遮挡。
于 2015-10-01T12:11:05.887 回答
0

以上答案还不够我的 customView 代码块。

迅速

import UIKit

class Focus: UIView {

    /*
    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func drawRect(rect: CGRect) {
        // Drawing code
    }
    */

    override func canBecomeFocused() -> Bool {
        return true
    }

    override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
        if context.previouslyFocusedView === self {
            UIView.animateWithDuration(0.1, animations: { () -> Void in
                context.previouslyFocusedView?.transform = CGAffineTransformMakeScale(1.0, 1.0)
            })
        }

        if context.nextFocusedView === self {
            UIView.animateWithDuration(0.1, animations: { () -> Void in
                context.nextFocusedView?.transform = CGAffineTransformMakeScale(1.4, 1.4)
            })
        }
    }
}
于 2015-11-28T14:59:04.500 回答