我有一个自定义的UITableViewCell子类,它为UILabel设置了一个简单的IBOutlet。
class SegmentCell: UITableViewCell {
@IBOutlet weak var test: UILabel!
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
test.text = "Some Text"
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我确信所有设置正确都遵循其他答案,但UILabel始终为零。
的ViewController: viewDidLoad中:
self.tableView.registerClass(SegmentCell.self, forCellReuseIdentifier: "Cell")
cellForForAtIndexPath
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! SegmentCell
return cell
}
我错过了什么?
答案 0 :(得分:1)
UITableViewCell 类和 ContentView 类不能相同。
答案 1 :(得分:0)
根据您注册单元格的方式,它不会从storyboard或xib文件加载它。它只会调用init方法。您的init方法不会创建标签,因此它始终为>>> sentence='i cant sleep what should i do'
>>> phrase='cant sleep'
>>> ' '.join(get_word_window(sentence,phrase,2,2))
'i cant sleep what should'
。
您还应该使用nil
代替dequeueReusableCellWithIdentifier(_:forIndexPath:)
。后者在故事板之前,将返回dequeueReusableCellWithIdentifier(_:)
,除非您之前已创建具有该标识符的单元格并将其返回。
最后,nil
调用的init方法不是您实现的方法,或者在尝试解包tableView
可选项时,应用程序会在test.text = ...
上崩溃。< / p>
答案 2 :(得分:0)
您应该先在viewDidLoad函数中注册它。
<canvas id="myChart" width="400" height="400"></canvas>
<script>
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
</script>
答案 3 :(得分:0)
在将自定义单元格类添加到位于Storyboard中的tableview中的单元格之后,我遇到了同样的问题。 我也注册单元格,就像在文档中一样。但现在我解决了我的问题。
“我再次删除了注册和检查单元格,所有IBOutlets都已初始化”
答案 4 :(得分:0)
由于您是uisg Xib文件,因此必须向进行注册,
tableView.register(UINib(nibName: "yourNib", bundle: nil), forCellReuseIdentifier: "CellFromNib")
想想,如果仅在class上注册,系统将不知道其Xib。对我来说这是有用的。
答案 5 :(得分:0)
我认为基本上在初始化时尚未设置网点。如果您想到达网点并对其进行操作,请覆盖didMoveToSuperview或类似内容并在其中进行。例如,这是我进入单元格中按钮出口所要做的:
open class MyTableViewCell: UITableViewCell {
// Top stack view, not the inner one.
@IBOutlet weak var stackView: UIStackView!
@IBOutlet weak var buttonView: UIButton?
open override func didMoveToSuperview() {
buttonView?.titleLabel?.adjustsFontForContentSizeCategory = true
}
func adjustForAccessibilityCategory(accessible: Bool) {
if accessible {
stackView.axis = .vertical
stackView.alignment = .leading
stackView.spacing = 2
} else {
stackView.axis = .horizontal
stackView.alignment = .center
stackView.spacing = 20
}
}
open override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
if #available(iOS 11.0, *) {
adjustForAccessibilityCategory(accessible: traitCollection.preferredContentSizeCategory.isAccessibilityCategory)
}
}
}