cellForRowAt()内でdequeueReusableCell()にてUIButtonが再利用出来ない(nilになる)
iOSアプリ開発初学者です。 SwiftでTodoアプリを作っています。
cellForRowAt()内でdequeueReusableCell()を用いてセル再利用をしていますが、
再利用前の状態のセルが残って描写されてしまい困っております。
知識が至らぬ点などあると思いますが、対応策をご教授いただけると幸いです。
発生している問題・エラーメッセージ
具体的にはTableViewCell内にUIButtonを配置しており、セル生成時に画像(初期値)をUIButtonに設定したいのですが、セル再利用時にUIButtonがnilになっていて参照できず設定が出来ません。
ただ、cellForRowAt()の後はUIButtonは存在はしているのか画像も表示されているし、タップ処理も実施できます。
- TableViewの情報について説明します。
TableView内にUIButton(画像左側の○or✅マーク)とUILabel(料理をする等)を配置しています。
以下に、①期待するパターン/②異常パターンのキャプチャを貼ります。
####②セル追加時の異常パターン(再利用前の情報が残る)
本事象となります。
チェック済みのセルを削除した後、セル新規追加を実施するとチェック済みの状態で生成されます。
※この時、後述ソースの★★★部分でnilとなっています。
該当のソースコード
★★★部分でUIButtonがnilとなってしまう。
Swift
1 /* Todo内容リスト */ 2 var missionList = [String]() 3 4 /* Todoリストのチェック状況 true:達成 / false:未達成 */ 5 var isCheckList = [Bool]() 6 7 /* セルを生成時にcall **/ 8 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 9 // セルの取得(再利用) 10 let cell = missionTable.dequeueReusableCell(withIdentifier: "CustomCell", for: indexPath) 11 12 // Todo内容をカスタムセルの Label(tag2)に設定 13 let cellLabel = cell.viewWithTag(2) as! UILabel 14 cellLabel.text = missionList[indexPath.row] 15 16 // カスタムセルのボタン(tag1)をunCkeckMarkに設定 17★★★ if (cell.viewWithTag(1) as? UIButton) != nil { 18 let cellButton = cell.viewWithTag(1) as! UIButton 19 20 // true/falseで画像切り替え 21 if (isCheckList[indexPath.row] == true) { 22 cellButton.setImage(UIImage(systemName: "checkmark.circle"), for: .normal) 23 } else { 24 cellButton.setImage(UIImage(systemName: "circle"), for: .normal) 25 } 26 27 // カスタムセルのボタンをタップした時にcallするメソッドを設定 28 // * チェック/アンチェックを切り替える 29 cellButton.addTarget(self, action: #selector(checkButton(_:)), for: .touchUpInside) 30 31 // カスタムセルのボタンのタグ値に行番号を保持 32 cellButton.tag = indexPath.row 33 } else { 34 debugLog("cell.viewWithTag(1) is nil.") 35 } 36 return cell 37 }
(補足)
TableViewCellのIdentifiler : "CustomCell"
TableViewCell配下の、
UIButtonにはTag:1
UILabel にはTag:2 を割り振っている
試したこと
Inspectorにてプロパティの確認は実施し、TableView周りの設定値(Tag値やセルIdentifierなど)に不備がないことを確認しました。
恐縮ですが他は特にできていません。
セル生成後は最初の描写はおかしくなれどUIButtonは存在しており、インスタンスの状態が不明なため。
補足情報(FW/ツールのバージョンなど)
Xcode : Version 12.2 (12B45b)
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー