Ios 以编程方式将UITableView添加到侧栏
我创建了一个自定义类,将侧栏添加到一些MainTableViewController中。如果用户单击MainTable行,侧边栏将打开,并在另一个UITableView中显示一些详细信息。因此,我需要在侧边栏视图中创建UITableView。这个新表应该有一些不同的自定义单元格 我的问题是,我的表中没有显示任何数据。细胞总是空的。我是否需要在init上设置其他内容来告诉TableViewController在哪里找到他的UITableViewDataSource 任何帮助都将不胜感激 这是我的代码:Ios 以编程方式将UITableView添加到侧栏,ios,uitableview,swift,Ios,Uitableview,Swift,我创建了一个自定义类,将侧栏添加到一些MainTableViewController中。如果用户单击MainTable行,侧边栏将打开,并在另一个UITableView中显示一些详细信息。因此,我需要在侧边栏视图中创建UITableView。这个新表应该有一些不同的自定义单元格 我的问题是,我的表中没有显示任何数据。细胞总是空的。我是否需要在init上设置其他内容来告诉TableViewController在哪里找到他的UITableViewDataSource 任何帮助都将不胜感激 这是我的代
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
....
这是我定制的自动取款机:
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)
并将我的单元格值设置为on cellForRowAtIndexPath:
cell.labelText = "Test"
您需要设置委托和数据源,然后重新加载表
tvc.delegate = self
tvc.dataSource = self
tvc.reloadData()
还要将tableview单元格注册到表中
tvc.registerClass(SideLabelTitleTableViewCell, forCellReuseIdentifier:"TitleLabelCell")
尝试用正确的语法实现类:
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-in方法
还有一件事,如果要使用XIB/故事板,请使用
awakeFromNib()
而不是init(style:UITableViewCellStyle,reuseIdentifier:String)
将自定义单元格类更改为:
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
谢谢我已经这样做了,标签仍然显示。但是我无法从CellForRowatineXpath设置标题标签的值。总是得到“零”。你知道吗?是的,你不应该使用var-labelText:String!,do cell.titleLabel.text=someText in cellForRowAtIndexPath:Instead或者您可以使用var-labelText:String{willSet{titleLabel.text=newValue}}@derdida我更新了我的答案,现在应该对您有用了谢谢:但是如果我为我的标签创建了一个IBOutlet,仍然会得到“在展开可选值时意外地找到nil”@IBVAR标题标签:UILabel!在init上使用:var titleLabel:UILabel=UILabel(frame:CGRectMake(0,015,44))-我还需要什么吗(通常我使用Interface Builder连接我的插座,但这是通过编程创建的)谢谢。我编辑了我的问题。在单元格中设置标签的“我的值”仍然存在问题。我真的需要重新加载吗(因为我在ViewDidLoad上设置了它,所以通常它不需要重新加载就可以工作,或者?)重新加载确保在第一次设置时填充表。