gpt4 book ai didi

ios - 预先选择单元格中的项目

转载 作者:行者123 更新时间:2023-11-30 12:33:01 25 4
gpt4 key购买 nike

所以我在加载时预选多个项目时遇到了一些麻烦。我的目标是加载我的应用程序并完全预先选择我的滚动条当前所在的单元格

我目前有一个图像图标和紧邻其下方的文本,问题是我的图标已预先选择并在开始时突出显示,但紧邻其下方的文本则不然,除非我单击另一个单元格并返回原始单元格。所以我知道在 swift 3.0 中,代码将如下所示来预选择我的图标,但没有文本。我尝试了一些事情,但没有成功,所以这就是为什么我删除了任何尝试预选择此代码中的文本的尝试。猜测了大约四个小时,所以我想我应该问一下,而不是再浪费一天时间!

    import UIKit

class IntroBar: UIView, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {


lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
cv.backgroundColor = .black
cv.dataSource = self
cv.delegate = self
return cv
}()

let cellId = "cellId"
let imageNames = ["Ex1","Ex2","Ex3","Ex4"]
let titles = ["Ex1-1","Ex1-2","Ex1-3","Ex-1-4"]

var loginController: LoginController?


override init(frame: CGRect) {
super.init(frame: frame)

collectionView.register(MenuCell.self, forCellWithReuseIdentifier: cellId)

addSubview(collectionView)
addConstraintsWithFormat("H:|[v0]|", views: collectionView)
addConstraintsWithFormat("V:|[v0]|", views: collectionView)


let selectIndexPath = IndexPath(item: 0, section: 0)
collectionView.selectItem(at: selectIndexPath, animated: false, scrollPosition: UICollectionViewScrollPosition())



setupHorizontalBar()
}

var horizontalBarLeftAnchorConstraint: NSLayoutConstraint?

func setupHorizontalBar() {
let horizontalBarView = UIView()
horizontalBarView.backgroundColor = UIColor(white: 0.95, alpha: 1)
horizontalBarView.translatesAutoresizingMaskIntoConstraints = false
addSubview(horizontalBarView)

horizontalBarLeftAnchorConstraint = horizontalBarView.leftAnchor.constraint(equalTo: self.leftAnchor)
horizontalBarLeftAnchorConstraint?.isActive = true

horizontalBarView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
horizontalBarView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 1/4).isActive = true
horizontalBarView.heightAnchor.constraint(equalToConstant:4).isActive = true
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
loginController?.scrollToMenuIndex(indexPath.item)
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 4
}


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! MenuCell

cell.imageView.image = UIImage(named: imageNames[indexPath.item])?.withRenderingMode(.alwaysTemplate)

cell.imageLabel.attributedText = NSMutableAttributedString(string: titles[indexPath.item], attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 10, weight: UIFontWeightHeavy), NSForegroundColorAttributeName: UIColor.black])
cell.imageLabel.textAlignment = .center
cell.tintColor = .darkGray

return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: frame.width / 4, height: frame.height)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}


required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

}



class MenuCell: BaseCell {

let imageLabel: UILabel = {
let label = UILabel()
return label
}()

let imageView: UIImageView = {
let iv = UIImageView()
iv.image = UIImage(named: "Ex1")?.withRenderingMode(.alwaysTemplate)
iv.tintColor = .darkGray
return iv
}()

override var isHighlighted: Bool {
didSet {
imageView.tintColor = isHighlighted ? .white : .darkGray
imageLabel.textColor = isHighlighted ? .white : .black
}
}

override var isSelected: Bool {
didSet {
imageView.tintColor = isSelected ? .white : .darkGray
imageLabel.textColor = isSelected ? .white : .black
}
}


override func setupViews() {
super.setupViews()

addSubview(imageLabel)
addSubview(imageView)
addConstraintsWithFormat("H:[v0(33)]", views: imageView)
addConstraintsWithFormat("V:[v0(33)]", views: imageView)
addConstraintsWithFormat("H:[v0(75)]", views: imageLabel)
addConstraintsWithFormat("V:[v0(50)]", views: imageLabel)

我为我粗糙的编码黑客工作道歉......我几天前才开始,所以我真的只是在尝试和错误。此外,任何有关清理部分代码的见解将不胜感激!

这就是目前的情况

This is the start up with only icon preselected

This is when I switch to the 2nd icon

不允许我发布第三张图片,因此我希望图片一看起来像图片二,除非最初启动时除外。

最佳答案

在您的cellForItem方法中添加cell.isSelected = true

此外,如果我需要手动选择单元格,我也会在 cellForItem 方法中执行此操作。因此,您不需要像以前那样手动指定 indexPath,因为您已经从方法本身获得了相应的 indexPath

将您的collectionView.selectItem(at: selectIndexPath,animated: false,scrollPosition: UICollectionViewScrollPosition())移动到渲染时您想要选择的单元格。

func collectionView(_ collectionView: UICollectionView, cellForItemAt
indexPath: IndexPath) -> UICollectionViewCell {

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId,
for: indexPath) as! MenuCell

cell.imageView.image = UIImage(named: imageNames[indexPath.item])?.withRenderingMode(.alwaysTemplate)

cell.imageLabel.attributedText = ...
cell.imageLabel.textAlignment = .center
cell.tintColor = .darkGray

if wantThisCellSelected == true {
cell.isSelected = true
collectionView.selectItem(at: indexPath, animated: false,
scrollPosition: UICollectionViewScrollPosition())
} else {
cell.isSelected = false
collectionView.deselectItem(at: indexPath, animated: false)
}
return cell
}

关于ios - 预先选择单元格中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43234231/

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