Как установить пользовательский делегат для UITableViewController? - PullRequest
0 голосов
/ 21 марта 2019

Одна ячейка в моем табличном представлении переносит меня в другой UITableViewController, где я должен выбрать один вариант. Я попытался установить первый viewcontroller как делегат UITableViewController, но он не работает, и мне нужно передать выбранные данные. Я думаю, что это не работает, потому что для UITableViewControllers вы не устанавливаете делегата, потому что они автоматически являются своими собственными делегатами. Так как я могу это сделать? Я возвращаюсь на self.navigationController?.popViewController(animated: true), чтобы не потерять информацию, которая уже была заполнена в первом контроллере представления. Есть ли способ установить пользовательский делегат для UITableViewController или я должен просто поместить табличное представление в обычный viewcontroller?

Спасибо

1 Ответ

2 голосов
/ 21 марта 2019

Вы устанавливаете delegate вашего UITableView в качестве первого контроллера.Не делайте этого, это delegate уже установлено по умолчанию, как это UITableViewController.


Вместо этого для передачи данных используйте закрытие обратного вызова:

class TVC: UITableViewController {

    var itemSelected: (Item) -> Void = { _ in }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        itemSelected(dataSourceArray[indexPath.row])
    }
}

и вконтроллер первого вида устанавливает закрытие этого контроллера, когда вы представляете / толкаете его

let vc = TVC(...)
vc.itemSelected = { item in // this is called when you call `itemSelected` from `TVC`
    // ... declare what will happen after item is selected
}
navigationController?.pushViewController(vc, animated: true)

или если вы используете сегы

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "identifier" {
        let destination = segue.destination as! TVC
        destination.itemSelected = { item in
            // ...
        }
    }
}
...