iOS: путь индекса didSelectRowAt работает только при втором нажатии - PullRequest
0 голосов
/ 08 января 2019

Я борюсь с проблемой в моем проекте 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()


}

Подробный вид отображается только после второго касания строки. Не в первый раз?

1 Ответ

0 голосов
/ 08 января 2019

У меня была эта проблема несколько лет назад, я не знал, что она сохраняется и сегодня.

Я решил это путем инкапсуляции всей логики в didSelectRowAt в основном потоке с использованием GCD. Вы можете проверить это:

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

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

Вы можете попробовать следующее:

Swift 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)
        })
    }
}
...