Получить все ячейки из UITableView - PullRequest
0 голосов
/ 04 августа 2020

Я хочу получить ВСЕ ячейки из UITableView, я понимаю, что tableView.visableCells вернет массив ячеек, видимых на экране, но мне нужно получить ВСЕ ячейки.

Ниже примерно показано, как я планирую достичь этого, однако я не могу понять, как получить ВСЕ ячейки, а не только видимые ячейки. Пользователи смогут изменить порядок ячеек UITableView, и я хочу иметь возможность записывать индекс каждой ячейки после того, как они переместили UITableViewCell, поэтому мне нужны все ячейки

var textArray : [String] = [] // This is populated elsewhere and contains 30+ items
var textDict = [String:String]()


// allCellIndexPaths is a placeholder. I need to know how to get all Cell IndexPaths
for cellIndex in allCellIndexPaths { 
    let cell = tableView.cellForRow(at: cellIndex)
    let text = cell.textLabel.text
    textDict["Cell \(cellIndex.row)"] = text
}

причина для этого я сохраняю textDict в файл, чтобы, когда пользователь меняет порядок ячеек, я сохраняю их новый индекс, а затем могу загружать контент в порядке значений индекса, которые я сохранил, даже после того, как приложение было полностью закрыта и снова открыта. Вот почему я не могу просто записать значение sourceIndexPath и destinationIndexPath, потому что это может привести к тому, что в моем dict будут два индекса, одинаковые, поэтому я хочу получить список каждого индекса ячейки и его текста.

Абсолютно открыт для лучшего способа сделать это

1 Ответ

1 голос
/ 04 августа 2020

Я не думаю, что вам нужна вся ячейка, чтобы реализовать переупорядочение ячейки. Вам просто нужно правильно сопоставить путь индекса переупорядочения. Ниже приведена ссылка с правильным примером изменения порядка ячейки. https://www.ralfebert.de/ios-examples/uikit/uitableviewcontroller/reorderable-cells/

вам нужно сделать таблицу в режиме редактирования

self.tableView.isEditing = true

Если вы хотите скрыть кнопку удаления в режиме редактирования, используйте:

override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
    return .none
}

override func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
    return false
}

Включите элемент управления переупорядочиванием для перемещения ячеек путем перезаписи tableView: moveRowAtIndexPath: и реализуйте метод так, чтобы элементы в базовом списке данных обновлялись:

override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
    let movedObject = self.headlines[sourceIndexPath.row]
    headlines.remove(at: sourceIndexPath.row)
    headlines.insert(movedObject, at: destinationIndexPath.row)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...