iOS:didSelectRowAt索引路径仅在第二次单击时有效

时间:2019-01-08 09:16:49

标签: ios swift uitableview didselectrowatindexpath

我在xcode项目中遇到问题。我在表格视图中显示自定义单元格,并使用didSelectRowAt indexPath:显示详细信息视图。它以我想要的方式工作,但仅在第二次单击时才奇怪。

我刚开始编程,非常感谢您的帮助。非常感谢!

我检查了是否偶然使用了didDeselectRow at。我还经历了stackoverflow尝试寻找解决方案,而这是我能找到的最接近我的问题的解决方案。但是我正在使用didSelectRow at

//这是我在用户点击一个单元格时的代码:

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

    // Pop Up Variables

    var id:String = tasks[indexPath.row].task_id!
    var title:String = tasks[indexPath.row].task_title!
    var type:String = tasks[indexPath.row].task!
    var desc:String = tasks[indexPath.row].task_desc!
    var action:String = "Dismiss"


    present(detailVC!, animated: true, completion: {
        self.detailVC!.setPopup(withTaskId: id, withTitle: title, withType: type, withDesc: desc, withAction: action)
         })



}

///这里只是一个注释,我正在将开关设置到文档顶部的另一个视图控制器。

//显示弹出窗口     var detailVC:TaskDetailViewController?

override func viewDidLoad() {
    super.viewDidLoad()

    // Set up the task detail view controller
    detailVC = storyboard?.instantiateViewController(withIdentifier: "TaskDetailVC") as! TaskDetailViewController?
    detailVC?.delegate = self
    detailVC?.modalPresentationStyle = .overCurrentContext

    // Conform to the table view protocols
    tableView.dataSource = self
    tableView.delegate = self

    // Set Self as delegate for model and call getTasks

    // Get the Tasks from the Task Model
    model.delegate = self
    model.getTasks()


}

仅当我第二次点击一行后,详细信息视图才会出现。不是第一次?

2 个答案:

答案 0 :(得分:0)

几年前,我遇到了这个问题,不知道它在今天仍然存在。

我通过使用GCD将所有逻辑封装在主线程中的didSelectRowAt中来解决了该问题。您可以查看以下内容:

https://stackoverflow.com/a/27907119/6642629

https://stackoverflow.com/a/26183438/6642629

您可以尝试以下操作:

快捷键4

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

    DispatchQueue.main.async {

        var id:String = tasks[indexPath.row].task_id!
        var title:String = tasks[indexPath.row].task_title!
        var type:String = tasks[indexPath.row].task!
        var desc:String = tasks[indexPath.row].task_desc!
        var action:String = "Dismiss"

        present(detailVC!, animated: true, completion: {
            self.detailVC!.setPopup(withTaskId: id, withTitle: title, withType: type, withDesc: desc, withAction: action)
        })
    }
}

答案 1 :(得分:0)

只需将InterfaceBuilder中的UITableView的SelectionMultiple Selection更改为Single Selection,它将按您的意愿工作。

然后,您应自行处理每行的选定状态(使用模型中的字段或为背景等设置颜色)

enter image description here