我已经创建了一个集合视图控制器,用作我的应用程序的导航系统,并且集合视图是在TabBar.swift
中创建的,另外还有两个继承自类TabBar
的视图控制器。因此TabBar
基本上是基本视图控制器。
struct OpenViewController {
var viewController: UIViewController
var cellImage: UIImage
}
class TabBar: UIViewController {
var viewControllerList = [OpenViewController]()
}
extension TabBar: UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
// Selecting a cell and navigating to another view controller
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// To present the view controllers
let openViewController = self.viewControllerList[indexPath.row]
self.present(openViewController.viewController, animated: false)
}
}
当用户点击集合视图中的单元格时,上述代码段将用户带到指定的视图控制器。下面的代码片段显示了如何在其他视图控制器中指定视图控制器:
class SecondScreen: TabBar {
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://SomeURL")
let downloader = ImageDownloader.default
downloader.downloadImage(with: url!) { result in
switch result {
case .success(let value):
print(value.image)
self.viewControllerList = [
OpenViewController(viewController: FirstScreen(), cellImage: #imageLiteral(resourceName: "error")),
OpenViewController(viewController: ThirdScreen(), cellImage: value.image)
]
case .failure(let error):
print(error)
}
}
}
}
运行此命令时,出现索引超出范围错误,应用崩溃。