带有collectionview的自定义菜单栏
Posted
技术标签:
【中文标题】带有collectionview的自定义菜单栏【英文标题】:Custom menu bar with collectionview 【发布时间】:2020-01-19 07:49:40 【问题描述】:我想问。我从 collectionView 制作了一个自定义菜单栏,我想在滑动时链接和更改我的收藏视图菜单栏和来自另一个 collectionView 的数据。这是我正在尝试制作的图片
但是当我尝试左右滑动时,我的菜单栏没有跟随,我已经做了一个引用来捕获这个值。但这仍然行不通。这是我的代码
class SegmentedView: UIView
let collectionView: UICollectionView =
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
return cv
()
let knowledge = ["Pengetahuan", "Keterampilan", "Sikap"]
var selectedMenu: CGFloat?
extension SegmentedView: UICollectionViewDataSource
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return knowledge.count
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! SegmentedCell
let item = knowledge[indexPath.item]
cell.nameLabel.text = item
return cell
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
selectedMenu = CGFloat(indexPath.item) * frame.width
// This from my SegmentedViewController
class SegmentedViewController: UIViewController
@IBOutlet weak var collectionView: UICollectionView!
@IBOutlet weak var segmentedViews: SegmentedView!
let cellId = "assesmentCell"
let colors: [UIColor] = [UIColor.blue, UIColor.yellow, UIColor.green]
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
setupCollection()
func scrollViewDidScroll(_ scrollView: UIScrollView)
print(scrollView.contentOffset.x / 3)
segmentedViews.selectedMenu = scrollView.contentOffset.x / 3
func setupCollection()
if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout
flowLayout.scrollDirection = .horizontal
flowLayout.minimumLineSpacing = 0
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)
collectionView.dataSource = self
collectionView.delegate = self
collectionView.isPagingEnabled = true
谢谢。
【问题讨论】:
【参考方案1】:您的 selectedMenu 属性不侦听具有 didSet property observer 的事件。所以当你在 scrollViewDidScroll 中设置 selectedMenu 时,什么也没有发生。
这可能是一个解决方案:
var selectedMenu: CGFloat?
didSet
collectionView.selectItem(at: <#T##IndexPath?#>, animated: <#T##Bool#>, scrollPosition: <#T##UICollectionView.ScrollPosition#>)
但是要小心 SegmentedView 的 collectionView(_:didSelectItemAt:) 方法,它会带来一些不想要的行为。您可以使用委托模式来触发另一个类中的方法。
【讨论】:
以上是关于带有collectionview的自定义菜单栏的主要内容,如果未能解决你的问题,请参考以下文章