gpt4 book ai didi

iOS 的 UITableView 有问题以编程方式选择多个单元格并显示支票

转载 作者:行者123 更新时间:2023-11-28 05:40:31 25 4
gpt4 key购买 nike

我有一个应用程序,用户可以在 UITableView 上选择多个项目。然后他们点击添加按钮并更新数组。然后倒带回到之前的 VC。现在,当用户单击返回以更新选择时。

我希望选择单元格并检查 accessoryStyle。到目前为止,除了选择单元格外,一切正常。因此该数组将有多个选项,并且那些选定的选项带有复选标记。

当用户选择一个单元格时,didSelect 应该将该选项添加到数组中(如果尚未添加)。当用户取消选择单元格时,将调用 didDeselect 并将该项目从数组中删除。 (也可以显示或不显示复选标记)。

现在的问题是,当用户返回未选中复选标记的单元格时,当他们选择销售时,它会调用 didSelect 而不是 didDeselect。我发现的大多数教程和帮助似乎只适用于单选,而且我似乎无法突出显示单元格。请参阅图片以获得更多说明。

新问题/更新

好了,最初的问题已经解决了。现在,当我选择数组的元素 0 时,数组的 10 元素也更改了附件。这也逐渐重复。

这是我的阵列设置

let expansionBayList: [ExpansionBay] = [ArcaneLaboratory(), CargoHold(), EscapePods(), GuestQuarters(), HangarBay(),
LifeBoats(), MedicalBay(), PassengerSeating(), PowerCoreHousing(), RecreationSuiteGym(),
RecreationSuiteTrividDen(), RecreationSuiteHAC(), ScienceLab(), SealedEnviromentChamber(), ShuttleBay()]

因此,当我从列表中选择 Arcane Laboratory 时,Recreation Suite Trivid Den 也有一个复选标记但未被选中。我假设这与 reuseIdentifier 有关?我假设我需要在滚动时清除它?

我尝试了以下方法(我在 cellForRowAt 中厌倦了它):

cell.isSelected = true
cell.isHighlighted = true

我还尝试了以下(在 viewDidLoad 中):

multiSelectTbl.allowsMultipleSelection = true
multiSelectTbl.allowsSelectionDuringEditing = true

这是用户第一次更新此屏幕。

enter image description here

这是当用户在上一个屏幕上选择 Expansion Bay 进行更新和更改时发生的情况。我如何才能使每个带有复选标记的单元格也像第一张图片一样突出显示?

有一个数组决定哪些框应该有复选标记。

enter image description here

最佳答案

重写自定义tableview cell类中的setSelected方法,

并使用 tableview.selectRow(at:) 函数来选择单元格。

使用 tableView.indexPathsForSelectedRows 获取表中选定的 indexPaths。

这是一个很好的实现。 https://github.com/yonat/SelectionList

回复新问题:请按照步骤操作。

  1. viewDidLoadviewWillAppear 方法

        var itemsToBeSelected: [String]?
    var listItems: [String]?

    ....
    override func viewDidLoad() {
    super.viewDidLoad()
    if let selected = self.itemsToBeSelected, let listItems = self.listItems {
    selected.forEach { (item) in
    if let index = listItems.index(of: item) {
    let indexPath = IndexPath(item: index, section: 0)
    self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
    }
    }
    }

    self.itemsToBeSelected 表示当 View Controller 出现时,需要在列表中默认选择它们。它只是上面示例中的 String 数组。

  2. cellForRowAt 方法

    No need to call cell.isSelected = true/false or cell.isHighlighted = true/false

    如果单元格是自定义单元格,您可以只将内容应用于单元格。在自定义单元类中,只需重写 setSelected 方法。

    class ExpansionBayCell {
    ....
    override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    self.checkBox.isChecked = self.isSelected
    }
    }
  3. 何时获取所有选定值并关闭 View Controller

    func btnDonePressed() {        
    guard let indexPaths = tableView.indexPathsForSelectedRows else {
    btnBackPressed()
    return
    }

    let items = indexPaths.map { self.listItems[$0.row] }
    completion(items)
    btnBackPressed()
    }

关于iOS 的 UITableView 有问题以编程方式选择多个单元格并显示支票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56919652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com