保存自定义静态ViewCell的重新订购



我有一些自定义的表视图单元格,它们都有不同的unib和不同的类别,并且希望重新排序单元格并持续安全地将其重新排序的位置安全。

我在我的tablevviewcontroller中注册了每个单元格和uinib

    let test1Nib = UINib(nibName: "Test1", bundle: nil)
    myTableView.register(overViewNib, forCellReuseIdentifier: "Test1")
    let test2Nib = UINib(nibName: "Test2", bundle: nil)
    myTableView.register(todoNib, forCellReuseIdentifier: "Test2")
    let test3Nib = UINib(nibName: "Test3", bundle: nil)
    myTableView.register(financeNib, forCellReuseIdentifier: "Test3")
    let test4Nib = UINib(nibName: "Test4", bundle: nil)
    myTableView.register(upcomingNib, forCellReuseIdentifier: "Test4")

然后,我将Uinibs添加到我的testarray中:

    testArray.append(test1Nib)
    testArray.append(test2Nib)
    testArray.append(test3Nib)
    testArray.append(test4Nib)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.row == 0 {
        let cell = myTableView.dequeueReusableCell(withIdentifier: "Test1", for: indexPath)
        return cell
    } else if indexPath.row == 1 { 
        let cell = myTableView.dequeueReusableCell(withIdentifier: "Test2", for: indexPath)
        return cell
    } else if indexPath.row == 2 {
        let cell = myTableView.dequeueReusableCell(withIdentifier: "Test3", for: indexPath)
        return cell
    } else {
        let cell = myTableView.dequeueReusableCell(withIdentifier: "Test4", for: indexPath)
        return cell
    }
}

MOVOWAT:功能正在按预期进行

func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
    let movedObject = self.testArray[sourceIndexPath.row]
    testArray.remove(at: sourceIndexPath.row)
    testArray.insert(movedObject, at: destinationIndexPath.row)
    NSLog("%@", "(sourceIndexPath.row) -> (destinationIndexPath.row)")
}

此时我有一些问题1.重新排序后,重新加载了单元格,因为我已经将其索引路径固定为静态值,现在问题是如何防止 他们重新排序自我和2.我该如何坚持这个顺序

我希望我能在这里找到帮助 - 我现在对网络进行了很多研究,但没有任何适合我的需求。希望我可以找到解决方案或一些链接或代码段。非常感谢!

您不应强迫IndexPath行的检查来决定要加载哪个单元格。

您应该获取它们的类型,然后切换到其中。类似:

let type = testArray[indexPath.row]
switch type {
    case Type1:
    let cell = myTableView.dequeueReusableCell(withIdentifier: "Test1", for: indexPath)
     return cell
    case Type2:
    let cell = myTableView.dequeueReusableCell(withIdentifier: "Test2", for: indexPath)
    return cell
}

您如何设置此类型取决于您。有几种方法可以做到这一点,选择您的喜欢。

相关内容

  • 没有找到相关文章

最新更新