Ios Swift 4:Xib具有集合视图,可重用故事板中的单元,内部插座为零
我有一个在主情节提要集合视图中使用的单元格:Ios Swift 4:Xib具有集合视图,可重用故事板中的单元,内部插座为零,ios,swift,uitableview,uicollectionview,swift4,Ios,Swift,Uitableview,Uicollectionview,Swift4,我有一个在主情节提要集合视图中使用的单元格: class TaskCell: UICollectionViewCell { @IBOutlet weak var exerciseTitle: UILabel! override func awakeFromNib() { super.awakeFromNib() self.layer.borderWidth = 1 self.layer.borderColor = #color
class TaskCell: UICollectionViewCell {
@IBOutlet weak var exerciseTitle: UILabel!
override func awakeFromNib() {
super.awakeFromNib()
self.layer.borderWidth = 1
self.layer.borderColor = #colorLiteral(red: 0.6666666865, green: 0.6666666865, blue: 0.6666666865, alpha: 1)
}
}
我创建了一个包含集合视图的XIB,并尝试在XIB的集合视图中使用此单元格。该单元已退出队列,但其内部的所有出口均为零
class AddTaskToSessionVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
@IBOutlet weak var collectionView: UICollectionView!
public var allTasks = [TaskCodableEntity]()
override func awakeFromNib() {
super.awakeFromNib()
}
override func viewDidLoad() {
super.viewDidLoad()
self.collectionView.delegate = self
self.collectionView.dataSource = self
self.collectionView.register(TaskCell.self, forCellWithReuseIdentifier: "TaskCell")
self.getCurrentPatientTasks()
// Do any additional setup after loading the view.
}
public func getCurrentPatientTasks() {
self.allTasks = API.getTasks()
}
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return self.collectionView.showNoDataLabel(array: self.allTasks)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.allTasks.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell = self.collectionView.dequeueReusableCell(withReuseIdentifier: "TaskCell", for: indexPath) as? TaskCell {
let taskEntity = self.allTasks[indexPath.row]
cell.exerciseTitle.text = taskEntity.title
***(Here exerciseTitle is nil)***
return cell
}
return UICollectionViewCell()
}
}
我的XIB看起来像:
我试图在单元格内实例化标签,但它仍然保持为零
有没有办法以这种方式重用单元,或者我应该创建XIB单元,尽管已经存在单元?您需要像这样注册XIB单元
collectionView.register(UINib(nibName: "TaskCell", bundle: nil), forCellWithReuseIdentifier: "TaskCell")
就这样
TaskCell.self
以编程方式创建单元格时使用
为了方便地使用xib视图,以及它的重用,我建议您查看框架 我想在这段引文中你们可以找到你们问题的答案。我认为您需要为类设置文件所有者(而不是视图),并且您可以使用
NibOwnerLoadable
和可重用
协议来更轻松地重用和加载视图
声明您的视图以符合NibLoadable或nibownerload
如果您正在使用的XIB不使用其
“文件所有者”和您正在设计的可重用视图是根视图
锡伯族人
如果使用的是“文件”的,请使用NibOwnerLoadable协议
属于可重用视图类的XIB的“所有者”,以及
XIB的根视图将设置为提供其
内容
希望它能帮助你 但我没有单元的XIB,它是故事板中使用的类如果你在IB中有一个原型单元,那么不需要注册它,只需要给它一个标识符并在CellForItemAt中使用它当我使用你的行时,我得到一个异常:“NSInternalInconsistencyException”,原因:'无法在捆绑包中加载NIB:'名为'TaskCell'的NSBundle'如果没有NIB注释任何寄存器行如果删除寄存器行,则会出现下一个异常:NSInternalInconsistencyException',原因:“无法将类型为的视图出列:标识符为TaskCell的UICollectionElementKindCell-必须为标识符注册nib或类,或在情节提要中连接原型单元格”您的exerciseTitle标签存在于何处,在哪个XIB中?如果您的单元是集合视图中的原型单元,则无需注册该单元,只需在XIB中选择原型单元,并从属性检查器右侧面板中将重用标识符设置为“TaskCell”,然后删除注册代码。将单元格的标签连接到exerciseTitle变量作为outlet clean并生成项目。@vivekDas请参见此处的对话也选择您的原型单元格并将自定义类设置为“TaskCell”,然后将标签的outlet连接到exerciseTitle。我尝试过使用库,但结果相同,出列后,内部出口为零cell@AlexBerd您的
XIB
看起来不是将Cell
插入到集合中,而是通常将UIView
插入到集合中?也许这是你的问题?