使用Swift的TableViewController和CustomCell

时间:2014-11-20 20:31:09

标签: xcode uitableview swift custom-cell

我正在尝试使用数据填充TableViewController并使用CustomCell显示它,这样我就可以在每一行上有两个标签和一个按钮。

我已将两个标签和按钮放在主故事板中的PrototypeCell中。

我创建了一个CustomCellTableViewCell类:

import UIKit

class CustomCellTableViewCell: UITableViewCell {

@IBOutlet var customCellLabel1: [UILabel]!
@IBOutlet var customCellLabel2: [UILabel]!

@IBOutlet var CustomCellButton: [UIButton]!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code

}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

}

在我的UITableViewController中我有:

var DevicesList: Array<AnyObject>=[]
var ii: Int = 1

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let CellID : NSString = "DeviceCell"

    var cell : CustomCellTableViewCell = tableView.dequeueReusableCellWithIdentifier(CellID) as CustomCellTableViewCell

    if DevicesList.count > 0 {
        var data: NSManagedObject = DevicesList[indexPath.row] as NSManagedObject

        cell.customCellLabel1[indexPath.row].text = data.valueForKeyPath("name") as? String

        println("loading row \(ii) loaded!")
        ii++
    } else {
                println("nothing loaded...?")
    }

    println("cell loaded")

    return cell

}

当我运行它但第一行已加载但后来我得到了:

loading row 1 loaded!
cell loaded
fatal error: Array index out of range

有罪的行显示为:

        cell.customCellLabel1[indexPath.row].text = data.valueForKeyPath("name") as? String

我有7行要加载,所以我需要附加标签/按钮数组,如果有,我在哪里/怎么做?

谢谢!

科斯塔斯

1 个答案:

答案 0 :(得分:1)

以下搜索是如何解决的:

创建新类:

import UIKit

class DeviceCustomCell: UITableViewCell {

@IBOutlet var myLabel1: UILabel!

@IBOutlet var myLabel2: UILabel!

@IBOutlet var myButton: UIButton!

override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}

@IBAction func PressButton(sender: AnyObject) {

    myButton.setTitle("OFF", forState: UIControlState.Normal)

}

}

将主故事板中的标签和按钮链接到两个变量(New Reference Outlet)。

将标识符设置为&#34; DeviceCustomCell&#34;对于Prototype Cell然后修改函数:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let CellID : NSString = "DeviceCustomCell"

    var cell = tableView.dequeueReusableCellWithIdentifier("DeviceCustomCell") as DeviceCustomCell


    if DevicesList.count > 0 {
        var data: NSManagedObject = DevicesList[indexPath.row] as NSManagedObject

        var devicename : String = data.valueForKeyPath("name") as String
        var lastchanged: String = data.valueForKeyPath("lastChangedRFC822") as String

        cell.myLabel1.text = devicename
        cell.myLabel2.text = lastchanged

        println("loading row \(ii) loading...")
        ii++

        return cell



    } else {
                println("nothing loaded...?")
    }


    return cell

}

现在效果很好!

重要的是理解这一行:

    var cell = tableView.dequeueReusableCellWithIdentifier("DeviceCustomCell") as DeviceCustomCell

因为它是成功的关键! :)

科斯塔斯