У меня есть контроллер представления, который содержит представление таблицы.Я хочу добавить возможность показывать ROW при каждом нажатии заголовка раздела, и наоборот ( расширяемое представление таблицы ).
код ниже показываеткод, который я написал для моего табличного представления:
func numberOfSections(in tableView: UITableView) -> Int {
return data.count
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cell = tableview.dequeueReusableCell(withIdentifier: "ReportHeaderCell") as! ReportHeaderTableViewCell
cell.IMG.image = #imageLiteral(resourceName: "Cost_Arrow")
cell.BillHeaderTitle.text = data[section].billType
cell.totalValue.text = data[section].totalValue?.addComma
cell.dateLbl.text = data[section].billDate
let animationView = LOTAnimationView(name: "CloseOpen")
animationView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
animationView.loopAnimation = false
animationView.autoReverseAnimation = false
animationView.play(fromProgress: 0, toProgress: 0.0, withCompletion: nil)
cell.openCloseView.addSubview(animationView)
animationView.play()
cell.MainView.addTapGesture {
print("header is tapped")
if self.isOpen[section] == true
{
print("header is open")
self.isOpen[section] = false
// we'll try to close the section first by deleting the rows
var indexPaths = [IndexPath]()
for row in self.data[section].units.indices {
print(0, row)
let indexPath = IndexPath(row: row, section: section)
indexPaths.append(indexPath)
// tableView.deleteRows(at: indexPaths, with: .bottom)
// tableview.reloadData()
self.tableview.deleteRows(at: indexPaths, with: .top)
}
let animationView = LOTAnimationView(name: "CloseOpen")
animationView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
animationView.loopAnimation = false
animationView.autoReverseAnimation = false
animationView.animationSpeed = 2.5
animationView.play(fromProgress: 1, toProgress: 0.0, withCompletion: nil)
cell.openCloseView.addSubview(animationView)
animationView.play()
}
else
{
print("header is close")
self.isOpen[section] = true
//let's open it
// we'll try to close the section first by deleting the rows
var indexPaths = [IndexPath]()
for row in self.data[section].units.indices
{
print(0, row)
let indexPath = IndexPath(row: row, section: section)
indexPaths.append(indexPath)
// tableView.insertRows(at: indexPaths, with: .top)
self.tableview.insertRows(at: indexPaths, with: .top)
// tableview.reloadData()
let animationView = LOTAnimationView(name: "CloseOpen")
animationView.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
animationView.loopAnimation = false
animationView.autoReverseAnimation = false
animationView.play(fromProgress: 0, toProgress: 1, withCompletion: nil)
animationView.animationSpeed = 2.5
cell.openCloseView.addSubview(animationView)
animationView.play()
}
}
}
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if self.isOpen[section] == true
{
print(data[section].units.count)
return data[section].units.count
}
else
{
return 0
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableview.dequeueReusableCell(withIdentifier: "ReportCell") as! ReportTableViewCell
//
// if indexPath.row != 0
// {
cell.UnitName.text = data[indexPath.section].units[indexPath.row]?.unitName
// print(data[indexPath.section].units[indexPath.row]?.unitName!)
cell.Unitdebit.text = data[indexPath.section].units[indexPath.row]?.debit?.addComma
if indexPath.row == data.count - 1
{
cell.DownRightView.isHidden = true
}
// }
// else{}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if isOpen[indexPath.section] == true
{
self.isOpen[indexPath.section] = false
let section = IndexSet.init(integer: indexPath.section)
tableView.reloadSections(section, with: .top)
}
else
{
self.isOpen[indexPath.section] = true
let section = IndexSet.init(integer: indexPath.section)
tableView.reloadSections(section, with: .bottom)
}
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 60
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 90
}
решено: здесь очень большая проблема !!и это:
например, у нас есть четыре раздела в нашем табличном представлении, и пользователь выбирает номер 2. Как только пользователь выбирает номер 2, разделы 3 и 4 исчезают !!!
, чтобы уточнить, разделы с большим номером выбранного раздела исчезнут!
У кого-нибудь есть IDEA, что я здесь не так делаю ??
ЭТА ОШИБКА ВСЕ ЕЩЕ ОСТАЕТСЯ: кто-нибудь может помочь !!!Я застрял
Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Недопустимое обновление: недопустимое количество строк в разделе 1. Количество строк в существующем разделе после обновления (2) должно быть равно количеству строк, содержащихся в этом разделе до обновления (0), плюс или минус количество строк, вставленных или удаленных из этого раздела (1 добавлено, 0 удалено), плюс или минус количество перемещенных строкв или из этого раздела (0 перемещен, 0 перемещен).
json, связанный с ошибкой
[
{
"totalValue" : 11,
"units" : [
{
"unitName" : "jack",
"debit" : 11,
"unit" : 1
},
{
"unitName" : "jack1",
"debit" : 11,
"unit" : 2
}
],
"billType" : "glocery",
"billDate" : "1998\/08\/20",
"billId" : 29049
}