在collectionView中完成移动后无法隐藏按钮

Posted

技术标签:

【中文标题】在collectionView中完成移动后无法隐藏按钮【英文标题】:unable to hide button after completing moving in collectionView 【发布时间】:2017-08-23 11:11:54 【问题描述】:

我通过水平单击按钮在collectionView的左侧和右侧滚动,效果很好,但是当collectionView的一侧没有更多项目时,我不知道如何隐藏按钮。当左侧没有更多项目时,预览按钮将隐藏,当右侧没有更多项目时,下一个按钮将隐藏。这是左右键的代码

let arrow_leftBtn: UIButton = 
    let btn = UIButton()
    btn.setImage(UIImage(named: "arrow_left"), for: .normal)

    btn.addTarget(self, action: #selector(arrowLeftBtnClick), for: .touchUpInside)
    return btn

()

func arrowLeftBtnClick() 
    let collectionBounds = self.collectionView?.bounds
    let contentOffset = CGFloat(floor((self.collectionView?.contentOffset.x)! - (collectionBounds?.size.width)!))
    self.moveToFrame(contentOffset: contentOffset)


let arrow_rightBtn: UIButton = 
    let btn = UIButton()
    btn.setImage(UIImage(named: "arrow_right"), for: .normal)


    btn.addTarget(self, action: #selector(arrowRightBtnClick), for: .touchUpInside)
    return btn


()


func arrowRightBtnClick() 

    let collectionBounds = self.collectionView?.bounds
    let contentOffset = CGFloat(floor((self.collectionView?.contentOffset.x)! + (collectionBounds?.size.width)!))
    self.moveToFrame(contentOffset: contentOffset)


func moveToFrame(contentOffset : CGFloat) 

    let frame: CGRect = CGRect(x : contentOffset ,y : self.collectionView!.contentOffset.y ,width : self.collectionView!.frame.width,height : self.collectionView!.frame.height)
    self.collectionView?.scrollRectToVisible(frame, animated: true)





func setupLeftAndRightArrow() 



    view.addSubview(arrow_leftBtn)
    view.addSubview(arrow_rightBtn)

    view.addConstraintsWithFormat("H:|-20-[v0(20)]", views: arrow_leftBtn)
    view.addConstraintsWithFormat("V:|-180-[v0(20)]|", views: arrow_leftBtn)

    view.addConstraintsWithFormat("H:[v0(20)]-30-|", views: arrow_rightBtn)
    view.addConstraintsWithFormat("V:|-180-[v0(20)]|", views: arrow_rightBtn)

【问题讨论】:

您想隐藏用于滚动UICollectionView的下一个和上一个按钮? 看到这个***.com/questions/29362915/… 当左侧没有更多项目时,预览按钮将隐藏,当右侧没有更多项目时,下一个按钮将隐藏 @user3589771 我编辑了我的问题,请再检查一遍 @user3589771 我添加了项目图片,请查看 【参考方案1】:

实现UICollectionViewDelegate方法:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath)

    arrow_rightBtn.isHidden = (indexPath.row == collectionView.numberOfItems(inSection: 0) - 1)
    arrow_leftBtn.isHidden = (indexPath.row == 0)

这将在最后一个单元格可见时隐藏arrow_rightBtn,并在第一个单元格可见时隐藏arrow_leftBtn

【讨论】:

来这里***.com/questions/48970198/… @QuietIslet 你能解释一下你提供的链接吗?我不明白。 如何在tableview单元格中只检测一个按钮,这里检测多个按钮,***.com/questions/48970198/… @QuietIslet 我已经在提供的链接中回答了您的问题。如果您仍然遇到任何问题,请查看并告诉我。【参考方案2】:

您可以使用 collectionView 委托方法来检测第一个最后一个单元格

override func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) 
    if indexPath.row == dataSource.count - 1 
        // Last cell is visible
        leftBtn.isHidden = false
        rightBtn.isHidden =true
     else if indexPath.row == 0 
        // First cell is visible
        leftBtn.isHidden = true
        rightBtn.isHidden = false
     else 
        //for others cells
        leftBtn.isHidden = false
        rightBtn.isHidden =false

    

【讨论】:

qustion是关于隐藏滑动左右键 @Baig 感谢尝试。我添加了项目的图像,请检查它 我明白了,当collectionView的第一个单元格可见时你可以隐藏左键,同样当collectionView的最后一个单元格可见时隐藏右键 @AzmalTech 请查看更新后的答案,可能会给您一些想法

以上是关于在collectionView中完成移动后无法隐藏按钮的主要内容,如果未能解决你的问题,请参考以下文章

使用动画更改 CollectionView 位置,但在第一次滚动时向后移动

点击按钮时如何使collectionView标头隐藏?

在 CollectionView -Objective-C 中显示/隐藏单元格

无法隐藏 UICollectionView?

移动端 input 获取焦点后弹出带enter(类似于搜索,确定,前往)键盘,以及隐藏系统键盘

下载图像后触发collectionView重新加载的完成处理程序-Xcode [SWIFT]