前提・実現したいこと
個人アプリの1画面にUITableViewを実装しUITableViewCellをxibで作成しています。
RealmDBに保存されているデータをUITableViewCell内のLabelに表示したいと思っており、プロパティをDelegateを使ってViewControllerに渡したいのですが意図通りの挙動になりません。
回答するのに足りない情報があれば教えていただけると嬉しいです。
原因の特定ができなかったのでアドバイスのほどよろしくお願いします。
発生している問題・エラーメッセージ
エラーは発生していませんが、TableViewのセル内のLabelに値が設定されません。
該当のソースコード
TableViewCell
1import UIKit 2 3protocol TableViewCellDelegate { 4 // セル内容の設定 5 func setCellContents(_ cell: TableViewCell, _ label: UILabel) 6} 7 8class TableViewCell: UITableViewCell { 9 10 @IBOutlet weak private var label: UILabel! 11 var TableViewCellDelegate: TableViewCellDelegate? 12 13 override func awakeFromNib() { 14 super.awakeFromNib() 15 self.toDoListTableViewCellDelegate?.setCellContents(self, toDoTitle) 16 } 17}
ViewController
1import RealmSwift 2 3var list: Results<List>! 4 5// セルの内容 6 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 7 let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as! TableViewCell 8 cell.TableViewCellDelegate = self 9 10 return cell 11 } 12 13// セル内容の設定 14 @objc func setCellContents(_ cell: TableViewCell, _ label: UILabel) { 15 guard let row = tableView.indexPath(for: cell)?.row else { 16 return 17 } 18 label.text = list[row].text 19 }
試したこと
デバッグで確かめたところ、ToDoListTableViewCell.swift
内ではDelegateメソッドを呼び出せていましたがFirstViewController.swift
内のDelegateメソッドには通ってくれていないようでした。
上記のコードには記載していませんが、セル内のボタンタップ時やラベルタップ時の処理はDelegateでViewControllerに渡せているので、Delegateの使い方はあっているように思います。
したがってTableViewCellの初期表示時のメソッドawakeFromNib()
からDelegateはできないのではないかと考えたのですが、解決方法にたどり着けませんでした。
何が原因となり得るのか、解決方法等アドバイスをいただきたいです。
補足情報(FW/ツールのバージョンなど)
Xcode:Version 10.1
Swift:version 4.2.1
回答1件
あなたの回答
tips
プレビュー