У меня есть пользовательский класс с именем MenuBar
, который UIView
используется для представления UICollectionView
контроллеру представления.У меня проблема с использованием перехода к другому контроллеру представления, когда выбран UICollectionViewCell
.Поскольку MenuBar
не является контроллером представления, я не могу назвать performSegue()
.Я создал переход в моей раскадровке между двумя контроллерами представления с идентификатором.Как я могу правильно запустить переход из моего пользовательского класса просмотра?Как это обычно делается?Я попытался создать новый экземпляр моего контроллера представления, чтобы я мог использовать .performSegue()
из функции didSelectItemAt
collectionView
, но я не думаю, что это вообще правильный способ сделать это.пример:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let vc = UARTModuleViewController()
vc.performSegue(withIdentifier: "colorSelection", sender: nil)
}
Будем очень благодарны за любые предложения о том, как выполнить переход из этой функции.Ниже я приведу ключевые компоненты моего существующего кода, чтобы вы могли видеть, что я делаю.В обоих классах гораздо больше кода, но я думаю, что этого должно быть достаточно для общего представления о том, чего я пытаюсь достичь.
view controller:
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)
}
}
Заранее спасибо всем, кто может дать полезные советы и предложения!