Я пытаюсь добавить и удалить ячейки табличного представления на основе состояния контроллера сегмента, встроенного в другую настраиваемую ячейку табличного представления.
Пожалуйста, смотрите изображение ниже для желаемой функциональности:
Желаемый результат для ячейки 1 и 2 должен всегда отображаться со значением ячейки 2, изменяющимся в зависимости от состояния контроллера сегмента в ячейке 1. Кроме того, ячейка 3 появляется только в том случае, если в сегменте ячейки 2 выбраны определенные состояния. контроллер.
Я хотел бы анимировать добавление и удаление ячейки 3 в качестве всплывающего окна.
Я настроил оператор If Else в cellForRowAt, который проверяет массив Ints, представляющих разные пользовательские ячейки, содержащие разные сегментированные контроллеры.
В настоящее время я пытаюсь вызвать метод из IBAction, связанного с 1-м сегментированным контроллером, func insertCustomSegmentcell, который вставляет новую строку в табличное представление и добавляет к массиву Ints (которые представляют различные контроллеры сегмента).
Я проверял, что функция работает и что массив обновляется, и это так. Но клетки не добавляются.
Если я жестко закодирую дополнительные ячейки в массиве: ArrayOfsegmentCellData и перезапущу приложение, оно работает.
На данный момент я просто пытался добавить дополнительную ячейку и не написал функцию удаления.
Я только начинаю со Swift и программирования в целом. Любая помощь и руководство очень приветствуются. Без сомнения, есть гораздо лучший способ приблизиться к этому!
Заранее спасибо.
Мы имеем дело только с разделом 0 таблицы, который относится к:
var ArrayOfsegmentCellData
TableViewController
import UIKit
struct CellData {
let image : UIImage?
let message : String?
}
struct SegmentCellData {
let cell : Int!
}
class TableViewController: UITableViewController {
var data = [CellData]() // Section 2 Data
var ArrayOfsegmentCellData = [SegmentCellData(cell: 1),SegmentCellData(cell: 2)] // Section 1 Data
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = "Add Item"
navigationController?.navigationBar.prefersLargeTitles = true
data = [CellData.init(image: UIImage(named: "Icon-60") , message: "1")]
self.tableView.register(CustomCell.self, forCellReuseIdentifier: "custom")
self.tableView.rowHeight = UITableView.automaticDimension
self.tableView.estimatedRowHeight = 200
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.section == 0 {
if ArrayOfsegmentCellData[indexPath.row].cell == 1 {
let cell = Bundle.main.loadNibNamed("Level1Cell", owner: self, options: nil)?.first as! Level1Cell
return cell
} else if ArrayOfsegmentCellData[indexPath.row].cell == 2 {
let cell = Bundle.main.loadNibNamed("Level2CellA", owner: self, options: nil)?.first as! Level2CellA
return cell
} else if ArrayOfsegmentCellData[indexPath.row].cell == 3 {
let cell = Bundle.main.loadNibNamed("Level2CellB", owner: self, options: nil)?.first as! Level2CellB
return cell
} else {
}
}
let cell = self.tableView.dequeueReusableCell(withIdentifier: "custom") as! CustomCell
cell.mainImage = data[indexPath.row].image
cell.message = "Cell Number: \((data[indexPath.row].message)!) -- Section: \(indexPath.section) Row: \(indexPath.row)"
cell.layoutSubviews()
return cell
}
//MARK: - Number of Sections in TableView
override func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if section == 0 {
return ArrayOfsegmentCellData.count
} else {
return 1
// data2.count
}
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
if section == 0 {
return "Header 1"
} else if section == 1 {
return "Header 2"
} else {
return "Defualt Header - out of range"
}
}
func insertCustomSegmentcell(cellInt:Int){
print("Inside insertCustomSegmentcell")
print("ARRAYCOUNT 1st \(ArrayOfsegmentCellData.count)")
ArrayOfsegmentCellData.append(SegmentCellData(cell: cellInt))
print("Array == \(ArrayOfsegmentCellData)")
print("ARRAYCOUNT 2nd \(ArrayOfsegmentCellData.count)")
let indexPath = IndexPath(row: ArrayOfsegmentCellData.count, section: 0)
tableView.beginUpdates()
tableView.insertRows(at: [indexPath], with: .automatic).self
tableView.endUpdates()
}
}
Level1Cell - связан с пользовательской ячейкой XIB
import UIKit
class Level1Cell: UITableViewCell {
var tvc = TableViewController()
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
@IBAction func Level1SegmentCellChanged(_ sender: UISegmentedControl) {
if sender.selectedSegmentIndex == 0 {
print("Location Segment Sender = A1")
tvc.insertCustomSegmentCell(cellInt: 2)
} else {
print("Location Segment Sender = B1")
tvc.insertCustomSegmentCell(cellInt: 3)
}
}
}