gpt4 book ai didi

uicollectionview - indexPathForPreferredFocusedView 没有被调用

转载 作者:行者123 更新时间:2023-12-03 16:45:12 29 4
gpt4 key购买 nike

我需要指定哪个单元格应该获得焦点。

根据 Apple 文档,indexPathForPreferredFocusedView如果 remembersLastFocusedIndexPath 应该调用委托(delegate)方法属性是 false ,或者如果没有保存的索引路径,因为以前没有单元格被聚焦。

就我而言,我在 UIViewController 中使用 Collection View 。和设置remembersLastFocusedIndexPathfalse但是 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)
}
}

collectionView

关于uicollectionview - indexPathForPreferredFocusedView 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48585956/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com