2014-11-20 2 views
0

Я пытаюсь заполнить TableViewController данными и отобразить их с помощью CustomCell, чтобы я мог иметь две метки и кнопку в каждой строке.TableViewController и CustomCell с использованием Swift

Я разместил две этикетки и кнопку в 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

Просто для будущих поисков здесь, как она была решена:

Создан новый класс:

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).

Важно иметь идентификатор как «DeviceCustomCell» для прототипа 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 

как он держит ключ к успеху!)

Kostas

Смежные вопросы