我有一个UICollectionView,它包含12-13个UICollectionViewCells。我可以轻松专注于UICollectionViewCells,一切正常。 UICollectionView外面有一个UIButton。如果我在第一个细胞或第二个细胞上,我向上滑动,那么我可以轻松地专注于UIButton。当我在第三个单元格上时,我无法将焦点移动到UIButton。有什么想法发生了什么?
答案 0 :(得分:14)
您应该使用包含您要关注的UIButton的UIFocusGuide。使UIFocusGuide与collectionView一样宽,并且足够高以覆盖按钮。使preferredFocusView成为按钮。
UIFocusGuide *topButtonFocusGuide = [[UIFocusGuide alloc] init];
topButtonFocusGuide.preferredFocusedView = myButton;
[self.view addLayoutGuide:topButtonFocusGuide];
[self.view addConstraints:@[
[topButtonFocusGuide.topAnchor constraintEqualToAnchor:myButton.topAnchor],
[topButtonFocusGuide.bottomAnchor constraintEqualToAnchor:myCollectionView.topAnchor],
[topButtonFocusGuide.leadingAnchor constraintEqualToAnchor:myCollectionView.leadingAnchor],
[topButtonFocusGuide.widthAnchor constraintEqualToAnchor:myCollectionView.widthAnchor],
]];
答案 1 :(得分:2)
Jess Bowers解决方案几乎就在那里,但Xcode说UIButton
s没有topAnchor
属性,Jess给出的解决方案对我不起作用。
对我来说,解决方案是创建一个巨大的视图,其宽度与UICollectionView
之上的宽度相同。见图。
代码将是:
UIFocusGuide *topButtonFocusGuide = [[UIFocusGuide alloc] init];
topButtonFocusGuide.preferredFocusedView = myButton;
[self.view addLayoutGuide:topButtonFocusGuide];
[self.view addConstraints:@[
[topButtonFocusGuide.topAnchor constraintEqualToAnchor:transparentView.topAnchor],
[topButtonFocusGuide.bottomAnchor constraintEqualToAnchor:transparentView.bottomAnchor],
[topButtonFocusGuide.leadingAnchor constraintEqualToAnchor:transparentView.leadingAnchor],
[topButtonFocusGuide.widthAnchor constraintEqualToAnchor:transparentView.widthAnchor],
]];
答案 2 :(得分:0)
使用:
覆盖弱var preferredFocusedView:UIView? { 得到{ return segmentedControl }}
答案 3 :(得分:0)
我遇到的一个问题涉及使用UINavigationController为登录页面在选择项目时将详细ViewControllers推送到堆栈。
我在UIButton的 canBecomeFocused 覆盖中放置了一个断点,并使用这个快速的小扩展程序询问按钮为什么它不可调焦。
extension UIView {
func whyNotFucusable () {
print(self.perform(Selector(("_whyIsThisViewNotFocusable"))).takeUnretainedValue())
}
}
我一直在尝试调试时收到以下错误....
ISSUE: This view may not be focusable because other views or focus guides are occluding it.
首先,我在字典中抬起头来看是什么意思遮挡......
verb, formal, technical
- stop, close up, or obstruct (an opening, orifice, or passage).
现在的问题是什么观点阻碍了我的UIButton ???
我在视觉调试器中快速打开了UI,在我的UIButton顶部有一个清晰的视图。检查视图我发现与 iOS不同,nagivationBar具有默认的系统背景颜色,tvOS的实现具有明确的默认颜色。我意识到我没有隐藏导航栏,作为回报,它阻碍了我的按钮。
我做了以下事情,并修复了我的所有问题:)
navController.setNavigationBarHidden(true, animated: false)
希望这有帮助!!!
答案 4 :(得分:0)
Swift 3.0
Jess Bower的回答对我有很大的帮助。节省了很多时间。
这适用于Swift 3& tvOS 10.现在必须使用preferredFocusEnvironments
。在ViewDidLoad()
self.view.addLayoutGuide(focusGuide)
self.focusGuide.topAnchor.constraint(equalTo: self.buttonAbove.topAnchor).isActive = true
self.focusGuide.bottomAnchor.constraint(equalTo: self.CollectionView.topAnchor).isActive = true
self.focusGuide.leadingAnchor.constraint(equalTo: self.CollectionView.leadingAnchor).isActive = true
self.focusGuide.widthAnchor.constraint(equalTo: self.CollectionView.widthAnchor).isActive = true
self.focusGuide.preferredFocusEnvironments = [self.buttonAbove]