我试图从UIView类中pushViewController,从而使用自定义委托来使用pushViewController。 以下是错误:
Cannot invoke initializer for type 'HomeCategCollectionView' with no arguments
下面是代码:
// ViewController
override func viewDidLoad() {
super.viewDidLoad()
let viewHomeCategories = HomeCategCollectionView() // here error comes
viewHomeCateg.delegate = self
}
// UIView class
private func showCategDetails(indexPath: IndexPath) {
delegate?.pushToListingButton()
}
更新:HomeCategCollectionView
class HomeCategCollectionViewModel {
var categViewVMs: [HomeCategCellViewModel]?
init(categModels: [GVMHomeCateg]?) {
self.categViewVMs = categModels?.map({
HomeCategCellViewModel(categ: $0)
})
}
}
protocol ListingDelegate : class {
func pushToListingButton()
}
class HomeCategCollectionView: UIView {
// MARK: Initialization and view setup
init(categViewModel: HomeCategCollectionViewModel?) {
self.viewModel = categViewModel
super.init(frame: .zero)
setup()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setup()
}
}
请引导。 希望我把我的问题说清楚了,如果不是可以随便问。 谢谢
HomeCategCollectionView
的初始值设定项是Init(categViewModel:HomeCategCollectionViewModel?)
,因此需要使用所有参数调用它:
// ViewController
override func viewDidLoad() {
super.viewDidLoad()
let data: [GVMHomeCateg] = // Your data
let viewModel = HomeCategCollectionViewModel(categModels: data)
let viewHomeCategories = HomeCategCollectionView(categViewModel: viewModel)
viewHomeCateg.delegate = self
}
或
override func viewDidLoad() {
super.viewDidLoad()
let viewHomeCategories = HomeCategCollectionView(categViewModel: nil)
viewHomeCateg.delegate = self
}
您需要用所有必需的参数初始化HomeCategCollectionView
,因此在本例中为CategViewModel
或Coder
。 下面的方法可以奏效。
let viewHomeCategories = HomeCategCollectionView(categViewModel: nil)
当然,理想情况下,您不会传递nil
,而是应该使用的视图模型的实例。