我正在为tvOS申请。我的视图包含UIButton
和自定义UIView
,其中包含其他一些自定义视图。模拟器只能突出显示UIButton
,而不能突出显示自定义视图。
根据Building Apple TV Apps Docs:
如果您的自定义视图需要具有焦点,请覆盖canBecomeFocused以返回YES(默认情况下,它返回NO)。
canBecomeFocused将返回
如果视图可以聚焦,则为YES;否则没有。
然而,尝试通过这样做为canBecomeFocus分配YES:
self.customView.canBecomeFocused = YES;
给出了这个错误:
No setter method 'setCanBecomeFocused:' for assignment to property
我如何做到这一点?
答案 0 :(得分:5)
看起来UIView
声明了函数/属性。
您是否尝试过覆盖这样的功能?
override func canBecomeFocused() -> Bool {
return true
}
- (BOOL)canBecomeFocused {
return YES;
}
我没试过这个,但它可能适合你。
答案 1 :(得分:2)
除了覆盖自定义视图中的canBecomeFocused
方法:
override func canBecomeFocused() -> Bool {
return true
}
确保自定义视图userInteractionEnabled
为真。这是完整的列表,以确保您的视图可以集中:
为什么这种观点不可聚焦?
预计可以关注的视图有多种原因可能不是,包括(但不限于):
- 视图的canBecomeFocused方法返回NO。
- 视图已隐藏 property的值为YES。
- 视图的alpha属性值为0.
- 视图的用户互动已停用。
- 视图被另一个视图遮挡。
答案 2 :(得分: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)
})
}
}
}