作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要指定哪个单元格应该获得焦点。
根据 Apple 文档,indexPathForPreferredFocusedView
如果 remembersLastFocusedIndexPath
应该调用委托(delegate)方法属性是 false
,或者如果没有保存的索引路径,因为以前没有单元格被聚焦。
就我而言,我在 UIViewController
中使用 Collection View 。和设置remembersLastFocusedIndexPath
至false
但是 indexPathForPreferredFocusedView
没有被调用。
如何解释这种行为?
最佳答案
函数indexPathForPreferredFocusedView
是 UICollectionViewDelegate 的一部分,因此可能是委托(delegate)未分配给您的 collectionView。
或者,问题也可能出在焦点环境上,没有考虑到您的 UICollectionView。
作为引用,这里有一个带有 5 个单元格的简单 collectionView 示例,默认情况下最初选择中心的那个
import UIKit
class ViewController: UIViewController {
private var collectionView: UICollectionView!
private var items = ["One", "Two", "Three", "Four", "Five"]
override var preferredFocusEnvironments: [UIFocusEnvironment] {
return [collectionView]
}
override func viewDidLoad() {
super.viewDidLoad()
collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: UICollectionViewFlowLayout())
collectionView.remembersLastFocusedIndexPath = false
MyCell.register(in: collectionView)
view.addSubview(collectionView)
collectionView.dataSource = self
collectionView.delegate = self
}
}
extension ViewController: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return items.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MyCell.reuseIdentifier, for: indexPath) as! MyCell
cell.titleLabel.text = items[indexPath.row]
return cell
}
}
extension ViewController: UICollectionViewDelegate {
func indexPathForPreferredFocusedView(in collectionView: UICollectionView) -> IndexPath? {
return IndexPath(row: 2, section: 0)
}
}
class MyCell: UICollectionViewCell {
static var reuseIdentifier: String { return String(describing: self) + "ReuseIdentifier" }
var titleLabel: UILabel!
public static func register(in collectionView: UICollectionView) {
collectionView.register(MyCell.self, forCellWithReuseIdentifier: MyCell.reuseIdentifier)
}
override init(frame: CGRect) {
super.init(frame: frame)
titleLabel = UILabel(frame: bounds)
backgroundColor = .blue
contentView.addSubview(titleLabel)
}
override func didUpdateFocus(in context: UIFocusUpdateContext, with coordinator: UIFocusAnimationCoordinator) {
backgroundColor = isFocused ? .red : .blue
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
}
关于uicollectionview - indexPathForPreferredFocusedView 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48585956/
我需要指定哪个单元格应该获得焦点。 根据 Apple 文档,indexPathForPreferredFocusedView如果 remembersLastFocusedIndexPath 应该调用委
我是一名优秀的程序员,十分优秀!