在 CollectionView Swift4 中选择第一个项目

Posted

技术标签:

【中文标题】在 CollectionView Swift4 中选择第一个项目【英文标题】:Select first Item in CollectionView Swift4 【发布时间】:2018-04-02 15:41:10 【问题描述】:

我试图在 Collectionview 加载时选择 CollectionView 中的第一个项目。我为 Swift 3 找到了许多解决方案,但在 Swift4 中没有一个对我有用。我尝试了什么(viewDidAppear):

import UIKit
import SDWebImage

class PostsTab_Details: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout 

@IBOutlet weak var PostsSelectRarityCollectionView: UICollectionView!
@IBOutlet weak var RarityTypeLbl: UILabel!

//Center my Collectionview Horizontal
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets 

        let totalCellWidth = 100 * (selectedPosts?.rarity.count)!
        let totalSpacingWidth = 10 * (3 - 1)

        let leftInset = (PostsSelectRarityCollectionView.frame.width - CGFloat(totalCellWidth + totalSpacingWidth)) / 2
        let rightInset = leftInset

        return UIEdgeInsetsMake(0, leftInset, 0, rightInset)



func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 

    return (selectedPosts?.rarity.count)!


func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell =  PostsSelectRarityCollectionView.dequeueReusableCell(withReuseIdentifier: "PostssTab_DetailCollectionCell", for: indexPath) as! PostsTab_DetailsCollectionViewCell

    cell.PostssTab_DetailCollectionImage.sd_setImage(with: URL(string: (selectedPosts?.PostsImageURL)!))



    return cell


func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    RarityTypeLbl.text = selectedPosts?.rarity[indexPath.row].rarity



 //Tried this also with IndexPath(item: 0, section: 0)
override func viewDidAppear(_ animated: Bool) 
    let selectedIndexPath = IndexPath(row: 0, section: 0)
    PostsSelectRarityCollectionView.selectItem(at: selectedIndexPath, animated: true, scrollPosition: .right)




var selectedPosts: Posts?

override func viewDidLoad() 
    PostsSelectRarityCollectionView.delegate = self
    PostsSelectRarityCollectionView.dataSource = self


但这不起作用......我希望有人知道我做错了什么......

提前致谢

更新: 感谢 Razib 的回答,现在这对我有用:

override func viewWillAppear(_ animated: Bool) 
    self.collectionView(PostsSelectRarityCollectionView, didSelectItemAt: IndexPath(row: 0, section: 0))

【问题讨论】:

Select items programmatically in UICollectionView的可能重复 @Gereon 这不起作用... 你能粘贴你的全视图控制器代码吗? @RazibMollick 用完整代码更新了我的问题 【参考方案1】:

您的代码对我来说似乎没问题。如果您想触发 didSelectItemAt 方法,请使用以下代码。

 override func viewDidAppear(_ animated: Bool) 
    self.PostsSelectRarityCollectionView(self.PostsSelectRarityCollectionView, didSelectItemAt: IndexPath(row: 0, section: 0))

【讨论】:

啊谢谢...我会在今天晚些时候或明天试一试,不确定我今天是否回家。但是我会给你一些反馈 好东西!像魅力一样工作【参考方案2】:

要在 Collectionview 加载时以编程方式选择 CollectionViewCell 中的第一个 Item,您应该在 viewDidAppear 中编写代码:

override func viewDidAppear(_ animated: Bool) 
    let indexPath:IndexPath = IndexPath(row: 0, section: 0)
    collectionView?.selectItem(at: indexPath, animated: false, scrollPosition: .top)

【讨论】:

【参考方案3】:

试试这个(Swift 5):

    let indexPath:IndexPath = IndexPath(row: 0, section: 0)
    collectionView?.selectItem(at: indexPath, animated: false, scrollPosition: .top)

【讨论】:

以上是关于在 CollectionView Swift4 中选择第一个项目的主要内容,如果未能解决你的问题,请参考以下文章

如何在所有设备中使用 swift4 在 CollectionView 中显示三列

Swift4 - 我第一次无法显示 CollectionView “无法同时满足约束”

collectionView 分为三行 swift 4

用动画隐藏上方的 CollectionView 单元格(Swift 4)

在 iOS Swift 中,在 Swift 4 中的 TableView 中为 CollectionView 集成不同的数组

如何使用部分在CollectionView中水平居中行