現在iOSアプリ開発の勉強を行なっています。
UITableViewの動作が所望通りにならないので、アドバイスいただけますと幸いです。
3つセクションをもつTableviewをstoryboardで設定しています。
各セクションは、Cellの上にUIViewを置き、その上にUILabelを置いています。
レイヤーはこんな感じです。
Table View
|
|-- Table View Cell (info)
|
|-- Content View
|
|----UIView
|
|---UILabel
※UIViewを配置している理由は影をつけるためだけです。いい方法が思いつかなかったので。
下記コードで、各セクションのセルに入れる内容を分けています。
各セクションのCellには共通してラベルを表示しています。
3つ目のセクション(Section2)では、ログアウトというラベルを文字配置真ん中で表示しています。
また、UIViewの背景色を変える、CellのaccessoryTypeをnoneにnoneにする処理をいれています。
swift
1func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 2 3 // セルを取得する 4 let Cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "Info", for: indexPath) 5 6 let label = Cell.viewWithTag(1) as! UILabel 7 let view = Cell.viewWithTag(2)! 8 9 switch indexPath.section { 10 case 0: 11 12 label.text = String(describing: userinfo_contents[indexPath.row]) 13 14 case 1: 15 16 label.text = String(describing: rule_contents[indexPath.row]) 17 18 case 2: 19 20 label.text = "ログアウト" 21 label.textAlignment = .center 22 23 24 //先頭のCellにも反映してしまうコード 25 view.layer.backgroundColor = UIColor.systemGray5.cgColor 26 Cell.accessoryType = .none 27 28 default: 29 print("default") 30 } 31 32 return Cell 33 }
上記コードを実機で動かすと、表示された時は
最後のCell(Section2)のみ 文字配置真ん中 背景色変更 が適用されうまくいっているのですが
何回かViewを上下させてうごかすと、先頭のCell(Section0)のプロフィールまで
文字配置真ん中 背景色変更 が適用されてしまいます。
とくに高速に上下させた場合はすぐ先頭のCellも変更されてしまいます。
これはCollectionViewでも同じような挙動がおきてしまうのですが、cellForRowAt関数内では見た目を変える処理は良くないのでしょうか。
初学者ゆえ皆目見当もつきません。
なにかご教授頂けますでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/19 07:59