#swift
Вопрос:
контроллер просмотра расширения: UITableViewDelegate {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
tableView.deselectRow(at: indexPath, animated: true)
let vc = storyboard?.instantiateViewController(identifier: "tasks") as! TaskViewController
vc.title = "New Tasks"
vc.task = tasks[indexPath.row]
navigationController?.pushViewController(vc, animated: true)
//error:Missing return in a function expected to return 'UITableViewCell'
}
}
Я пытаюсь различать типы возвращаемых данных, но ни один из них не является правильным
Комментарии:
1. Создание экземпляра контроллера вида внутри
cellForRow
бессмысленно. Вы должны удалить из очереди и вернуть ячейку представления таблицы.2. если вы пытаетесь открыть задачи «контроллер просмотра» при нажатии на ячейку, вместо этого используйте метод делегирования didSelectRow
Ответ №1:
Процесс неправильный в этой функции, вы должны создать экземпляр ячейки и работать с ним, чтобы иметь возможность вернуть его
Измененный код:
extension ViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
/// Create a file for the cell let's say call it `myCell` with a label for task "let's suppose called `lblTaskOutlet`
let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! myCell
myCell.lblTaskOutlet = tasks[indexPath.row]
return cell
}
}
Вы можете добавить это vc.title = "New Tasks"
в свой viewDidLoad()
:
self.title = "New Tasks"
Приведенная ниже строка-это еще одна функция, вызываемая наедине со своим собственным телом:
tableView.deselectRow(at: indexPath, animated: true)
Комментарии:
1. не могли бы вы рассказать более конкретно, пожалуйста??:(((
2. Хорошо, я изменю ответ
3. Ответ уже отредактирован, проверьте его @lekhoile
Ответ №2:
TableView(_ TableView: UITableView, cellForRowAt indexPath: indexPath) -> Метод UITableViewCell-это метод делегата tableview, который заполняет ячейки для каждой строки. Он ожидает возвращаемый тип UITableViewCell. Вы можете создать подкласс UITableViewCell TaskCell
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
/// Create a file for the cell let's say call it `TaskCell` with a object for task "let's suppose called `taskObj`
let cell = tableView.dequeueReusableCell(withIdentifier: "TaskCell", for: indexPath) as! TaskCell
cell.taskObj = tasks[indexPath.row]
return cell
}
Для действия щелчка по ячейке вам необходимо переопределить другой UITableViewDataSource
метод.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = storyboard?.instantiateViewController(identifier: "tasks") as! TaskViewController
vc.title = "New Tasks"
vc.task = tasks[indexPath.row]
navigationController?.pushViewController(vc, animated: true)
}
И, пожалуйста, убедитесь, что вы установили делегат tableview и источник данных в поле зрения для загрузки контроллера представления.
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.delegate = self
self.tableView.dataSource = self
}