我有一个自定义的UITableViewCell,我使用界面构建器设计了一个标签和一个选择器。对于实现swift文件,我添加了两个引用来引用标签和选择器。出口连接到ui元素,代码看起来像这样
class TitlePickerCell: UITableViewCell
{
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var picker: UIPickerView!
override func awakeFromNib()
{
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool)
{
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
我有一个UITableViewController我想用这个单元格。我将它设置为静态因为我正在使用它来显示设置,并且单元格的数量永远不会以编程方式更改。我将一个自定义单元添加到表视图中,并将其标识符设置为MediaStyleCell。
然后,在我的UITableViewController的swift文件中,我将此行添加到我的viewDidLoad函数
self.settingsTable.registerNib(UINib.init(nibName: "TitlePickerCell", bundle: nil), forCellReuseIdentifier: "MediaStyleCell")
其中TitlePickerCell是.xib文件的名称,MediaStyleCell是我通过接口构建器为单元格提供的标识符。当我运行我的应用程序时,它会崩溃,因为我的自定义单元格类中的标签和选择器是零。
答案 0 :(得分:2)
如果您使用的是tableview.registerClass:forCellReuseIdentifier:但是您也具有单元格的xib文件,则会收到此错误。
所以不是
tablView.register(Cell.self, forCellReuseIdentifier: cellToDisplay.identifier)
只需使用
tableView.register(UINib(nibName: cellToDisplay.identifier, bundle: nil), forCellReuseIdentifier: cellToDisplay.identifier)
答案 1 :(得分:1)
答案 2 :(得分:1)
我认为发生这种情况的唯一原因是,如果插座没有正确链接,正在注册错误的nib /标识符,或者.xib文件中的重用标识符丢失/不正确。
无法重现,这是我使用的VC代码:
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.registerNib(UINib.init(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "DifferentIdentifier")
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 44
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: CustomTableViewCell = tableView.dequeueReusableCellWithIdentifier("DifferentIdentifier", forIndexPath: indexPath) as! CustomTableViewCell
cell.titleLabel.text = "HERPITY"
return cell
}
}
这是细胞:
class CustomTableViewCell: UITableViewCell {
@IBOutlet var titleLabel: UILabel!
@IBOutlet var pickerView: UIPickerView!
override func awakeFromNib() {
super.awakeFromNib()
titleLabel.text = "Works"
pickerView.backgroundColor = UIColor.blueColor()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
我得到了这个漂亮的丑陋细胞(我只是把它变成蓝色,因为它是第一次自动完成)
答案 3 :(得分:-1)
似乎创建自定义UITableViewCell是错误的方法。只需将单元格样式设置为自定义并以这种方式添加UI元素即可。