我是新的swift .I有CollectionView在侧表视图。我通过添加新的CollectionView xib文件并将相应的swift文件附加到新的xib文件中来修改它。我已经成功初始化图像和标签在第一个TableView单元格
struct Colors {
var objectsArray = [
TableViewCellModel(
category: "ALL DEALS",
headerButton: UIButton.init(),
colors: [
[CollectionViewCellModel(image: UIImage(named:"Rectangle1x.png")!, dicountAmountLabel: "30%", dicountLabel: "Discount", customerTypeLabel: "For All HBL Customers"),
CollectionViewCellModel(image: UIImage(named:"Rectangle2.png")!, dicountAmountLabel: "30%", dicountLabel: "Discount", customerTypeLabel: "For All HBL Customers")]
])
,
TableViewCellModel(
category: "CATEGORIES",
colors: [
// SubCategory #2.1
[CollectionViewCellModelButton(collectionButton:UIButton.init()),
CollectionViewCellModelButton(collectionButton:UIButton.init()),
CollectionViewCellModelButton(collectionButton:UIButton.init()),
CollectionViewCellModelButton(collectionButton:UIButton.init())]
])
]
}
我的UICollectionViewCell
import UIKit
class CollectionViewCellButton: UICollectionViewCell {
@IBOutlet var collectionButton: UIButton!
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
}
这是我的模型结构
import Foundation
import UIKit
struct CollectionViewCellModelButton {
var collectionButton: UIButton!
}
如何初始化按钮在第二个tableView细胞名称在CollectionViewCellModelButton?
行CollectionViewCellModelButton(collectionButton:UIButton.init())
给出语法错误如何纠正?错误是
不能将类型'CollectionViewCellModelButton'的值转换为期望元素类型的数组。ArrayLiteralElement"(又名CollectionViewCellModel)
TableViewCellModel中的color值类型为CollectionViewCellModel即变量的数据类型颜色是[CollectionViewCellModel]并且您正在尝试传递类型CollectionViewCellModelButton的数据.
你的UICollectionViewCell已经有一个UIButton outlet,它将在cell加载时初始化下面是修改后的模型,您可以使用
struct CollectionViewCellModelButton {
var btnTitle: String
}
// Initialize your model like this
TableViewCellModel(category: "CATEGORIES", colors: [CollectionViewCellModelButton(btnTitle: "text"), CollectionViewCellModelButton(btnTitle: "text1")])
编辑:你得到的错误是因为你正在传递数据类型CollectionViewCellModelButton到期望CollectionViewCellModel的类型要解决这个问题,你可以创建一个共同的协议,你可以遵守你的两个模型
protocol CollectionViewModel {
}
struct CollectionViewCellModelButton: CollectionViewModel {
var btnTitle: String
}
struct CollectionViewCellModel: CollectionViewModel {
var titleLabel: String
}
// pass the protocol to colors
struct TableViewCellModel {
var category: String
var subcategory: [String]
var colors: [[CollectionViewModel]]
}
现在传递CollectionViewCellModelButton不会给出错误
但是像这样使用的时候,你必须把你的模型向下倾斜
// set title in button like this
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionviewcellid", for: indexPath) as? CollectionViewCell {
// downcast CollectionViewModel to CollectionViewCellModelButton type
if let model = self.rowWithColors[indexPath.item] as? CollectionViewCellModelButton {
cell.collectionButton.setTitle(model.title, for: .normal)
}
return cell
}
return UICollectionViewCell()
}
在使用CollectionViewCellModel时应该进行类似的向下转换还