ios - 以编程方式从 collectionView Cell didSelectItemAt 推送到新的 ViewController - swift
问题描述
我试图创建一个以编程方式实现的简单应用UICollectionViewController
程序。我已经创建了一些单元格,当用户单击特定单元格时应该移动到另一个控制器。但我面临的问题是哪个视图没有推送到下一个视图控制器。
这是我在其中设置 rootViewControllerappDelegate
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
let flow = UICollectionViewFlowLayout()
let collectionView = ViewController(collectionViewLayout: flow)
let navigation = UINavigationController(rootViewController: collectionView)
window?.rootViewController = navigation
这是我创建的方式UICollectionView
private let cellId = "cellid"
var viewController: ViewController?
override func viewDidLoad() {
super.viewDidLoad()
collectionView?.backgroundColor = .white
collectionView?.register(UICollectionViewCell.self, forCellWithReuseIdentifier: cellId)
// Do any additional setup after loading the view, typically from a nib.
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath)
cell.backgroundColor = .red
return cell
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 5
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: view.frame.width, height: 210)
}
这是我如何控制用户点击特定的
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print(indexPath.item)
viewController?.pushView()
}
func pushView() {
let controller = UINavigationController(rootViewController: DetailController())
self.navigationController?.pushViewController(controller, animated: true)
}
甚至调用了该函数,但它永远不会推送到新的视图控制器
解决方案
首先,您必须确保您当前的视图控制器具有导航视图控制器,您可以通过在 viewDidLoad 方法 print(self.navigationViewController) 中打印对象来检查。如果打印 nil,那么您必须按照以下步骤制作导航控制器 - SelectYourVicotroller -> Go to Editor menu option -> Embed to -> Navigation Controller
func pushView() {
let controller = DetailController()
//OR
//Add the storyboard identifier of your view controller - "DetailController"
let controller = self.storyboard.instantiateViewController(withIdentifier: "DetailController") as! DetailController
self.navigationController?.pushViewController(controller, animated:true)
}
将此方法调用到 didSelect 方法中
推荐阅读
- android - 如何通过 REST API 将 APK/Bundle 上传到 Firebase 测试实验室?
- terraform - 如何为不是为 terraform 中的每个模块创建资源?
- c# - 如何使控件失去焦点单击它之外的任何位置?
- sql - SQLite 在递归 CTE 上是否存在性能不足或者我写错了 sql?
- swift - 使用 ToolbarItem(placement: .principal) re: largeTitle 的正确方法是什么?
- java - 传递给 @OneToMany 和 @OneToOne 的 Spring Boot Data JPA 分离实体
- sql-server - 如何在将源的最大日期添加到其他源的同时对不同的源求和
- typescript - const 变量作为类型 - 打字稿
- prometheus - 获取每个时间序列的最新值
- reactjs - 是否可以使用对象类型定义来构造新的数组/元组类型?