Ios 以编程方式将UITableView添加到侧栏

Ios 以编程方式将UITableView添加到侧栏,ios,uitableview,swift,Ios,Uitableview,Swift,我创建了一个自定义类,将侧栏添加到一些MainTableViewController中。如果用户单击MainTable行,侧边栏将打开,并在另一个UITableView中显示一些详细信息。因此,我需要在侧边栏视图中创建UITableView。这个新表应该有一些不同的自定义单元格 我的问题是,我的表中没有显示任何数据。细胞总是空的。我是否需要在init上设置其他内容来告诉TableViewController在哪里找到他的UITableViewDataSource 任何帮助都将不胜感激 这是我的代

我创建了一个自定义类,将侧栏添加到一些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上设置了它,所以通常它不需要重新加载就可以工作,或者?)重新加载确保在第一次设置时填充表。