我正在尝试使用数据填充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行要加载,所以我需要附加标签/按钮数组,如果有,我在哪里/怎么做?
谢谢!
科斯塔斯
答案 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
因为它是成功的关键! :)
科斯塔斯