2016-01-30 3 views
0

Я новичок в iOS и программировании вообще и пытаюсь создать свое первое приложение. Я искал какое-то время для решения этого вопроса, но не смог найти его. У меня есть UITableView с ячейками, разделенными на разделы, которые я бы хотел, чтобы пользователь удалял. У меня не было проблем с его реализацией, чтобы удалить ячейки, но я хочу удалить раздел, когда в нем есть нулевые ячейки, и это вызывает у меня проблемы. Мои методы numberOfSectionsInTableView и numberOfRowsInSection возвращают правильную сумму. Мой метод commitEditingStyle выглядит следующим образом: (dataTable - это словарь типа [String: [String]], который я использую для хранения информации для каждой ячейки, где ключ является заголовком раздела, а значения являются ячейками в этом разделе.)Как удалить раздел из UITableView в Swift?

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 

    if editingStyle == .Delete { 

     dataTable[Array(dataTable.keys)[indexPath.section]]!.removeAtIndex(indexPath.row) 
     if dataTable[Array(dataTable.keys)[indexPath.section]]!.count == 0 { 

      dataTable.removeValueForKey(Array(dataTable.keys)[indexPath.section]) 
      tableView.deleteSections(NSIndexSet(index: indexPath.section), withRowAnimation: .Fade) 

     } else { 

      tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 

     } 

    } 

} 

Я считаю, что я сузил проблему, но я не знаю, как ее исправить. Когда я называю tableView.deleteSections я получаю ошибку

'Invalid update: invalid number of rows in section 1. The number of rows 
contained in an existing section after the update (1) must be equal to the 
number of rows contained in that section before the update (3), plus or 
minus the number of rows inserted or deleted from that section (0 inserted, 
0 deleted) and plus or minus the number of rows moved into or out of that 
section (0 moved in, 0 moved out).' 

Я полагаю, что это происходит потому, что секция 2 перемещается вверх в раздел 1, раздел 3, раздел 2, и т.д., когда раздел 1 удаляется, но количество ячейки в каждом разделе не обновляются. В моем тестировании я обнаружил, что эта ошибка возникает только в том случае, если каждый раздел после удалённого не имеет одинаковых номеров ячеек, как тот, который удаляется (так что 1 ячейка, так как секция удаляется только тогда, когда число ячеек сводится к нулю). Я думаю, чтобы исправить это, я мог бы вручную обновлять количество ячеек в каждом разделе, но я не знаю, как это сделать. Опять же, проблема заключается не в том, что я возвращаю неверное значение для количества ячеек и количества секций. Любая помощь будет большой, и спасибо заранее.

+0

может показать, как вы заселяете свою ячейку –

+0

Ну его рабочий штраф –

+0

@HamzaAnsari Что вы подразумеваете под этим? – user3128464

ответ

1

Я нашел решение моей проблемы, поэтому я хотел бы поделиться. По какой-то причине я предполагал, что dataTable сохранит свой порядок после удаления объекта, поэтому каждый раз в моем коде я вызывал dataTable.keys, а вместо этого делал dataTable.keys.sort().

0

Вы можете использовать следующие два метода делегата для обработки раздел удаления:

func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool { 
    return true 
} 

func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) { 
    if (editingStyle == .Delete) { 
    // handle delete (by removing the data from your array and updating the tableview) 

    self.tableView.beginUpdates() 

    self.feedData.removeObjectAtIndex(indexPath.row) // also remove an array object if exists. 
    self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Left) 

    self.tableView.endUpdates() 
}