自定义委托以使用来自 UIView 的 pushViewController class
Custom delegate to use pushViewController from UIView class
我正在尝试从 UIView class 中使用 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: [=13=])
})
}
}
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
,因此在本例中为 categViewModel
或 coder
。以下将起作用。
let viewHomeCategories = HomeCategCollectionView(categViewModel: nil)
当然理想情况下你不传递 nil
而是应该使用的视图模型实例。
您 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
}
我正在尝试从 UIView class 中使用 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: [=13=])
})
}
}
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
,因此在本例中为 categViewModel
或 coder
。以下将起作用。
let viewHomeCategories = HomeCategCollectionView(categViewModel: nil)
当然理想情况下你不传递 nil
而是应该使用的视图模型实例。
您 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
}