Удаление и вставка строк, вызывающих сбой при большом количестве ячеек - PullRequest
0 голосов
/ 21 сентября 2018

У меня проблема с вставкой и удалением ячеек табличного представления.У меня в основном есть 1 tableView, который может отображать в нем 3 разных массива в зависимости от режима, выбранного пользователем.

Когда пользователь нажимает на другой режим, я хочу анимировать первоначальное удаление ячейки, а затем анимировать вставку других ячеек.

Это работает, когда мои массивы действительно маленькие (размер 5 или около того), но когда они становятся больше, я получаю сбои.Мы ограничены в удалении indexPaths, которые не отображаются в tableViews?

В любом случае мой код выглядит следующим образом:

 func viewDidLoad() {
    let o1 = "1"
    let o2 = "2"
    let o3 = "3"
    array1 = [o1, o2, o2, o1, o3, o1, o2] 
    array2 = [o3, o2, o2, o1, o3, o1, o2, o2, o2, o1, o3, o1, o2]
    array3 = [o3, o1, o2, o2, o2, o1, o3, o1, o2]
}

func animateTableTransitions() {
    let array: [String]!
    let previousArray: [String]!
    let index = ModeEnum.index
    let previousIndex = ModeEnum.index //Custom enum that mains the index at which each mode is presented
    var indexPaths = [IndexPath]()
    var previousIndexPaths = [IndexPath]()
    switch (currentMode, previousMode) {
    case (.mode1, .mode2):
        array = array1
        previousArray = array2
    case (.mode1, .mode3):
        array = array1
        previousArray = array3
    case (.mode2, .mode1):
        array = array2
        previousArray = array1
    case (.mode2, .mode3):
        array = array2
        previousArray = array3
    case (.mode3, .mode1):
        array = array3
        previousArray = array1
    case (.mode3, .mode2):
        array = array3
        previousArray = array2
    default:
        return
    }

    for index in 0..<array.count {
        indexPaths.append(IndexPath(row: index, section: 0))
    }

    for index in 0..<previousArray.count {
        previousIndexPaths.append(IndexPath(row: index, section: 0))
    }

    if previousTranslationMode == .text && textModeOn {
        previousIndexPaths.append(IndexPath(item: textArray.count, section: 0))
    }

    let firstAnimationType: UITableViewRowAnimation = index < previousIndex ? .right : .left
    let secondAnimationType: UITableViewRowAnimation = index < previousIndex ? .left : .right

    tableView.performBatchUpdates({
        self.tableView.deleteRows(at: previousIndexPaths, with: firstAnimationType)
        self.tableView.insertRows(at: indexPaths, with: secondAnimationType)
    }, completion: nil)

Как уже говорилось, когда массивы не заполняют такое количество элементов, проблем не возникает.Но у меня есть проблема, когда массивы заполнены чем-то, что, кажется, больше чем 5 пунктов.Любая помощь будет принята с благодарностью.

Спасибо, что уделили время, Алан

...