以编程方式将UITableView添加到补充工具栏

时间:2014-08-19 14:54:29

标签: ios uitableview swift

我创建了一个自定义类来为我的一些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"

3 个答案:

答案 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)