【发布时间】:2018-11-25 21:02:05
【问题描述】:
我有一个名为MenuBar 的自定义类,它是一个UIView,用于将UICollectionView 呈现给视图控制器。我遇到的问题是在选择UICollectionViewCell 时使用对另一个视图控制器的segue。由于MenuBar 不是视图控制器,我似乎无法调用performSegue()。我在我的故事板中创建了一个带有标识符的两个视图控制器之间的 segue。如何从我的自定义视图类中正确触发 segue?这通常会怎么做?我尝试创建我的视图控制器的新实例,以便我可以在 didSelectItemAt collectionView 函数中使用 .performSegue(),但我认为这根本不是正确的方法。示例:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let vc = UARTModuleViewController()
vc.performSegue(withIdentifier: "colorSelection", sender: nil)
}
任何关于如何在此函数中执行 segue 的建议将不胜感激。下面我将提供我现有代码的关键组件,以便您可以看到我在做什么。这两个类中都有更多代码,但我认为这对于我想要完成的总体概念来说应该足够了。
视图控制器:
class UARTModuleViewController: UIViewController, CBPeripheralManagerDelegate {
override func viewDidLoad() {
setupMenuBar()
}
let menuBar: MenuBar = {
let mb = MenuBar()
return mb
}()
private func setupMenuBar() {
view.addSubview(menuBar)
menuBar.translatesAutoresizingMaskIntoConstraints = false
menuBar.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
menuBar.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
menuBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
menuBar.heightAnchor.constraint(equalToConstant: 80).isActive = true
}
}
MenuBar.swift:
class MenuBar : UIView, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
lazy var collectionView : UICollectionView = {
let layout = UICollectionViewFlowLayout()
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
cv.backgroundColor = UIColor.clear
cv.dataSource = self
cv.delegate = self
return cv
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupCollectionView()
}
private func setupCollectionView() {
self.addSubview(collectionView)
collectionView.register(MenuCell.self, forCellWithReuseIdentifier: "MenuCell")
collectionView.translatesAutoresizingMaskIntoConstraints = false
collectionView.topAnchor.constraint(equalTo: topAnchor).isActive = true
collectionView.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
collectionView.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true
collectionView.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let vc = UARTModuleViewController() // I want to perform a segue from here
vc.performSegue(withIdentifier: "colorSelection", sender: nil)
}
}
提前感谢任何可以提供有用意见和建议的人!
【问题讨论】:
标签: ios swift uicollectionview segue