【问题标题】:How to update UITableView when isEditing property changes?isEditing 属性更改时如何更新 UITableView?
【发布时间】:2019-04-02 01:44:17
【问题描述】:

我目前有一个带有导航栏的 TableViewController 和一个 editButtonItem。当我点击这个按钮时,我的 tableview 正确地进入了编辑模式,但是我想在 isEditing 更改时更改我的自定义 UITableViewCell 上的标签。我尝试将以下内容添加到 cellForRowAt:

   if editingMode {
        cell.timeZoneLabel = ""
    } else {
        cell.timeZoneLabel = timeZone.city
    }

但似乎当 isEditing 更改时 tableView 没有重新加载。

我的下一个想法是在开始时设置以下变量:

var editingMode = false {
    didSet {
        tableView.reloadData()
    }
}

并将以下内容添加到 viewDidLoad() 以便我可以在 isEditing 更改时重新加载 tableView:

    editingMode = isEditing

这似乎也不起作用。我已尝试寻找其他解决方案,但找不到遇到类似问题的人。

任何指导将不胜感激!

【问题讨论】:

    标签: swift uitableview


    【解决方案1】:

    在单元格中覆盖didTransition(torawValue 0 代表正常状态,rawValue 1 是showingEditControl

    override func didTransition(to state: UITableViewCell.StateMask) {
        switch state.rawValue {
        case 0: timeZoneLabel = timeZone.city
        case 1: timeZoneLabel = ""
        default: break
        }
    }
    

    【讨论】:

    • 感谢您的快速回答!我一直在尝试使用它,但奇怪的是它只识别默认大小写和大小写 0,但从不识别大小写 1。这似乎很奇怪,因为唯一的代码设置编辑模式是 editBarButtonItem 声明。我会在这里遗漏其他明显的东西吗?
    • 我也尝试过只切换状态,使用 .showingEditControl,但也没有运气。
    • 嗯,我很快测试了它,它工作。在switch 行之前插入print(state) 以查看所有状态。
    • 所以我只是尝试了一下,我得到了以下结果: UITableViewCellStateMask(rawValue: 18446744071562067969) 我尝试对我在 iOS Programming Big Nerd Ranch 中遵循的示例做同样的事情(检查我是否滑倒了在我的应用程序的其他地方),我得到了相同的原始价值。任何想法可能来自哪里?积极的一面是,当我在 switch 语句中使用该原始值时,我可以成功隐藏标签,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2020-02-11
    相关资源
    最近更新 更多