我有一个UITableViewController,其中有三个UITableViewCell静态
我想为单元格内部的一个标签创建一个插座,我无法拖放,我通过互联网阅读,人们建议执行以下操作
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(CellIdentefiers.oneMenuCell.rawValue)
let label = cell!.viewWithTag(1) as! UILabel
label.font = UIFont(name: Constants.centuryGothic.rawValue, size: CGFloat(17))
return cell!
}
我给了那个标签= 1
我做了什么遗失?
人们要求这个
enum CellIdentefiers : String {
case numberOfPeopleCell
case dayCell
case timeCell
case preferencesCell
case oneHistoryCell
case oneConfirmationCell
case oneMenuCell
}
答案 0 :(得分:0)
你的枚举需要原始值,即
enum CellIdentefiers : String {
case numberOfPeopleCell = "numberOfPeopleCell"
case dayCell = "dayCell"
case timeCell = "timeCell"
case preferencesCell = "preferencesCell"
case oneHistoryCell = "oneHistoryCell"
case oneConfirmationCell = "oneConfirmationCell"
case oneMenuCell = "oneMenuCell"
}
答案 1 :(得分:0)
重用标识符用于动态单元格。要在静态单元格中为标签创建插座,可以将连接IBOutlet从故事板拖到ViewController。我刚试过它,它绝对有用。
编辑:这是一张图片,证明您可以将IBOutlets连接到静态单元格标签。
答案 2 :(得分:0)
你需要在viewDidLoad中专门为一个给定的标识符注册一个单元格:
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cellIdentifier")
在你的情况下,你会做类似的事情:
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: CellIdentefiers.oneMenuCell.rawValue)
当你在cellForRowAtIndexPath中访问它时,你需要在dequeueReusableCellWithIdentifier中访问该标识符“cellIdentifier”:
let cell = tableView.dequeueReusableCellWithIdentifier("cellIdentifier")
在你的情况下,你正是这样做的:
let cell = tableView.dequeueReusableCellWithIdentifier(CellIdentefiers.oneMenuCell.rawValue)
问题是这些步骤通常在您使用“自定义”单元格时完成。如果您不想使用自定义单元格,只需在cellForRowAtIndexPath中执行以下操作:
let cellIdentifier = "Cell"
var cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier)
if(cel == nil){
cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellIdentifier)
}
最后,@ MikeAtNobel是正确的。您需要从枚举而不是int值提供String值。因此,他提出的改变似乎是有效和正确的。