当前位置: 首页 > 面试题库 >

IOS Swift 4中的TableView CheckMark和Uncheck With滚动仍选中的单元格值

岳嘉容
2023-03-14
问题内容

向上滚动后删除TableView
CheckMark单元格值将修复TableView,向上滚动然后向下滚动后,您将多次遇到Checkmark的问题,将显示Checkmark单元格将被删除,因为单元格为dequeueReusableCell,因此,此问题解决方法是您刚将您的代码并解决了您的问题。

任何其他帮助,请发送按摩。非常感谢。:)

class ViewController: UIViewController , UITableViewDataSource , UITableViewDelegate{

var temp = [Int]()
var numarr = [Int]()

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return numarr.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCell(withIdentifier: "id")
    cell = UITableViewCell.init(style: .default, reuseIdentifier: "id")
    cell?.textLabel?.text = String(numarr[indexPath.row])
    if temp.contains(numarr[indexPath.row] as Int)
    {
        cell?.accessoryType = .checkmark
    }
    else
    {
        cell?.accessoryType = .none
    }
    return cell!
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let cell = tableView.cellForRow(at: indexPath)
    if temp.contains(numarr[indexPath.row] as Int)
    {
        cell?.accessoryType = .none
        temp.remove(at: temp.index(of: numarr[indexPath.row])!)
    }
    else
    {
        cell?.accessoryType = .checkmark
        temp.append(self.numarr[indexPath.row] as Int)
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    for i in 1...100
    {
        numarr.append(i)
    }
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

问题答案:

我认为,如果有人要运行您的代码,则不会显示任何错误。但是如果有真实数据,它可能会。的 原因存储您的选中标记方式
。您temp应该在存储数组的实际值时将一行的数据存储indexPath到数组中,以便 只有该行才具有选中标记
。在您的情况下,如果一行1内有标签,然后单击它,则该单元格将突出显示。现在,如果您开始滚动并且包含另一个单元格,1则该行也将突出显示。

对于单节,我已经修改了您的示例。如果有多个部分,则需要存储indexPath而不是indexPath.row

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCell(withIdentifier: "id")
    cell = UITableViewCell.init(style: .default, reuseIdentifier: "id")
    cell?.textLabel?.text = String(numarr[indexPath.row])
    if temp.contains(indexPath.row) {
        cell?.accessoryType = .checkmark
    } else {
        cell?.accessoryType = .none
    }
    return cell!
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let cell = tableView.cellForRow(at: indexPath)
    if temp.contains(indexPath.row) {
        cell?.accessoryType = .none
        temp.remove(at: indexPath.row)
    } else {
        cell?.accessoryType = .checkmark
        temp.append(indexPath.row)
    }
}


 类似资料:
  • 问题内容: 我在这样的表格视图中有一个数字列表。 如您所见,数字是重复的。让我们考虑一组重复的数字作为一个组。因此,有一组1,一组2,依此类推。 我想做的是当应用启动时,我需要自动滚动到指定组的开始位置。在进一步解释之前,这是到目前为止的代码。 import UIKit 我为变量分配了值12 。这意味着当应用程序启动时,我希望表格视图自动滚动到 12s组单元格的开始。 但是目前,我的代码执行的是滚

  • 问题内容: 我有一个JTable,我想用自定义渲染器尝试检查isEnabled()的所有禁用的复选框单元变灰,然后更改背景颜色,但仍然无法使用。有什么建议么?谢谢!!! 问题答案: 如“ 概念:编辑器和渲染器 ”中所述,“通常使用单个单元格渲染器来绘制包含相同类型数据的所有单元格。” 您需要维护表模型中的enabled状态。 附录:作为一个具体示例,此示例中的数据模型是一组简单的Date实例。ge

  • 欢迎 在这个表中,我让列中提到的单元格可编辑,让用户随心所欲地制作所需的值...但是他们告诉我,这个列的值可以只取其中一个值:25,50,75,100,所以,他们问我制作一个选项菜单(就像图片中提到的那样),允许他们直接选择所需的值并快速工作。那么,我该如何解决它呢?(注意:我正在使用java秋千)

  • 我试图将乘法VBox添加到scrollpane中的gridpane(在下面的codesnippet中称为refPane)。 它在一行中添加不超过ITEMS_PER_ROW的Vbox,并在下一行中继续。也不应该有更多的行,然后ITEMS_PER_COLUM可见。问题是,如果我添加更多的ITEMS_PER_ROW*ITEMS_PER_COLUMN到网格中,而不是obingbeingscrollable

  • 我试图在jquery mobile Iscroll中使用scroll to element函数,但它不起作用 这就是我的脚本的样子 我在这里尝试了MyJSFIDLE

  • 单击包含< code>VerticalLayout行等组件的Vaadin 8 中的单元格时,不会选中该行(使用Vaadin 8.1.5)。 如果组件未填充整个单元格,则单击单元格中未使用的区域会使该行处于选中状态。 我一直在研究如何将点击组件转发到单元格点击侦听器,但尚未对此有任何控制。猜猜这甚至不是最好的方法。 解决方案是什么?