いつもお世話になります。
UITableView
にコードからセクションを追加した際に、セルの数によっては追加セクションが画面外になって
しまうことがあるのですが、これをなんとか追加時に画面内に表示することはできないでしょうか?
セルの追加の際には、scrollToRow(at:at:animated:)
メソッドにて画面内にスクロールさせてから、背景色をつけたりしています。
同じような感じで追加したセクションを画面内に表示できないでしょうか?
追加したセクションの上のセクションの最後のセルを画面内に表示するようにスクロールさせることも考えたのですが、セクションの中にセルが存在しない場合もあるのでこの方法ではうまくいかないようです。
swift
1 2// セクション名称の配列 3var sectionHeaderArray = ["1Char", "2Char","3Char"] 4// セル名称の配列 5var cellArrayOfArray = [["A", "B", "C"], ["AA", "AA", "AA"], ["AAA", "BBB", "CCC"]] 6 7 8// セクションの追加 9// 配列への追加 10sectionHeaderArray.append("4Char") 11cellArrayOfArray.append([]) 12// 追加するインデックスパスを取得する 13let addSectionIndex = sectionHeaderArray.count - 1 14// tableViewへの追加 15tTableView.insertSecion(IndexSet(interger: addSectionIndex), with: .fade) 16 17// アニメーションさせるためreload()はしたくない。 18 19 20// セルの追加 21// セルを追加するセクション 22var appendSection = 2 23 24// 配列への追加 25cellArrayOfArray[appendSection].append("DDD") 26 27// 追加するインデックスパスを取得する 28let addCellIndex = cellArrayOfArray.count -1 29let addCellIndexPath = IndexPath(row: addCellIndex, section: appendSection) 30 31// tableViewへの追加 32tTableView.insertRows(at: [addCellIndexPath], with: .fade) 33tTableView.scrollToRow(at: addCellIndexPath, at: .middle, animated: true) 34 35// セルの背景に選択色をつけ、その後解除する 36if let addCell = tTableView.cellForRowAt(at: addCellIndexPath) as? customCell { 37 addCell.backgroundColor = UIColor.lightGray // editing = trueのため、contentViewでなくセルに直接背景色を設定 38 DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { 39 UIView.animate(withDuration: 0.5, animations: { 40 // 追加したセルの背景色設定を解除する 41 addCell.backgroundColor = UIColor.clear 42 }) 43 } 44 } 45 46 47 48 49 50
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。