2017-12-16 10 views
1

私はカスタムUITableViewCellを持っており、私はそれを私のテーブルビューで使用したいと思います。ここでは、セルのための私のコードは次のとおりです。UITableViewCellでカスタムイニシャライザを使用するにはどうすればよいですか?

class ReflectionCell: UITableViewCell { 

@IBOutlet weak var header: UILabel! 
@IBOutlet weak var content: UILabel! 
@IBOutlet weak var author: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 

init(data: Reflection) { 
    self.header.text = data.title 
    self.content.text = data.content 
    self.author.text = data.author.name 
    super.init(style: UITableViewCellStyle.default, reuseIdentifier: "reflectionCell") 
} 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
} 
} 

私は私が、細胞を初期化したいモデルクラスReflectionを持っています。しかし、私のビューコントローラでは、私はtableView.dequeueReusableCell(withIdentifier: "reflectionCell", for: indexPath)を使用する必要があります。私が作ったようなカスタムイニシャライザを使う方法はありますか?

+0

TableViewCellあなたがそれをしない、再利用されます。あなたができることは、 'updateWith(data:Reflection)'メソッドを作成し、ラベルの値を設定するか、 'var data:Reflection'を設定し、' didSet'にラベルの値を設定することです。 – Larme

答えて

1

dequeueReusableCellを使用する場合、呼び出される初期化メソッドを変更することはできません。しかし、独自のメソッドを記述してIBOutletを更新し、セルを正常にデキューした後に呼び出すことができます。

class ReflectionCell: UITableViewCell { 

    @IBOutlet weak var header: UILabel! 
    @IBOutlet weak var content: UILabel! 
    @IBOutlet weak var author: UILabel! 

    func update(for reflection: Reflection) { 
     header.text = reflection.title 
     content.text = reflection.content 
     author.text = reflection.author.name 
    } 

} 

そして

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "identifier", for: indexPath) as! ReflectionCell 
    cell.update(for: reflections[indexPath.row]) 
    return cell 
} 
関連する問題