我创建了一个自定义类来为我的一些MainTableViewControllers添加侧边栏。如果用户单击MainTableRow,侧边栏应该打开并在另一个UITableView中显示一些详细信息。所以我需要在侧边栏View中创建一个UITableView。这个新表应该有一些不同的自定义单元格。
我的问题是,我的表中没有显示数据。细胞总是空的。我是否需要在init上设置其他任何东西来告诉TableViewController他在哪里找到他的UITableViewDataSource?
非常感谢任何帮助。
这是我的代码atm:
class SideView: UIView, UITableViewDataSource, UITableViewDelegate {
在初始化时,我将TableView加载到我的视图中:
init(view: UIView) {
super.init(frame: CGRect(x: view.frame.size.width, y: 0, width: 150, height: view.frame.size.height-40))
var tvc:UITableView = UITableView(frame: CGRectMake(0, 0, 150, 768), style: UITableViewStyle.Plain)
addSubview(tvc)
....
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("TitleLabelCell", forIndexPath: indexPath) as SideLabelTitleTableViewCell
cell.titleText = "Hello Test"
return cell
....
这是我的Custom Cell atm:
var titleText:String!
init(style: UITableViewCellStyle, reuseIdentifier: String) {
super.init(style: style, reuseIdentifier: "TitleLabelCell")
// Initialization code
var titleLabel:UILabel!
titleLabel.frame = CGRectMake(0,0,150,44)
titleLabel.text = titleText
self.contentView.addSubview(titleLabel)
}
编辑:好了,现在数据源应该可以工作,但是我无法使用我的UITableViewCell。
我用:
tvc.dataSource = self
但是当我尝试从我的sideViewClass为“titleLabel”设置一个值时,它总是“nil”。如果我从CustomCellClass设置它,它按预期工作:
init(style: UITableViewCellStyle, reuseIdentifier: String) {
super.init(style: style, reuseIdentifier: "TitleLabelCell")
var labelText:String!
println(self.labelText)
var titleLabel:UILabel = UILabel(frame: CGRectMake(0,0,150,44))
titleLabel.text = self.labelText // THIS IS NOT WORKING, always nil?
self.contentView.addSubview(titleLabel)
在cellForRowAtIndexPath上设置我的单元格值:
cell.labelText = "Test"
答案 0 :(得分:1)
将您的自定义单元格类更改为:
var titleLabel:UILabel!
init(style: UITableViewCellStyle, reuseIdentifier: String) {
super.init(style: style, reuseIdentifier: "TitleLabelCell")
// Initialization code
titleLable = UILable()
titleLabel.frame = CGRectMake(0,0,150,44)
self.contentView.addSubview(titleLabel)
}
然后
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("TitleLabelCell", forIndexPath: indexPath) as SideLabelTitleTableViewCell
cell.titleLabel.text = "Hello Test"
return cell
答案 1 :(得分:0)
您需要设置委托和数据源,然后重新加载表。
tvc.delegate = self
tvc.dataSource = self
tvc.reloadData()
同时使用表
注册tableview单元格tvc.registerClass(SideLabelTitleTableViewCell, forCellReuseIdentifier:"TitleLabelCell")
答案 2 :(得分:0)
尝试以正确的语法实现类:
class MyCell: UITableViewCell {
var titleLabel = UILabel(frame:CGRectMake(0.0, 0.0, 150.0, 44.0))
var labelText: String! {
willSet {
titleLabel.text = newValue
}
}
init(style: UITableViewCellStyle, reuseIdentifier: String) {
super.init(style: style, reuseIdentifier: "TitleLabelCell")
contentView.addSubview(textLabel)
}
}
不要在方法中声明外部var / let
还有一件事,如果您打算使用XIB /故事板,请使用awakeFromNib()
代替init(style: UITableViewCellStyle, reuseIdentifier: String)