#ios #uitableview #uiviewcontroller #swift3
#iOS #uitableview #uiviewcontroller #swift3
Вопрос:
Я реализовал a UITableView
внутри a UIViewController
. Я создал пользовательский класс UITableView
named HomePageTableView
и сослался на него в раскадровке. Ниже приведен код для HomePageTableView
и HomePageViewController
HomePageViewController:
import Foundation
import UIKit
class HomePageViewController: UIViewController {
@IBOutlet var tableView: HomePageTableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.reloadData()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
HomePageTableView:
class HomePageTableView: UITableView, UITableViewDelegate, UITableViewDataSource {
var items: [String] = ["Item1", "Item2", "Item3"]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell:UITableViewCell = self.dequeueReusableCell(withIdentifier: "cell1")! as UITableViewCell
cell.textLabel?.text = self.items[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("You selected cell #(indexPath.row)!")
}
}
Когда я пытаюсь запустить это, tableview загружает пустой tableview, и никакие ячейки не могут быть выбраны или отображать какое-либо содержимое. Я не могу выбрать какие-либо ячейки или вообще взаимодействовать с tableview. Мне было интересно, как я могу загрузить данные в этот tableview и настроить его так, чтобы я мог взаимодействовать с ним. Я рассматривал возможность размещения кода tableview в контроллере представления, но было бы более полезно иметь tableview в своем собственном классе.
Заранее спасибо!!
Комментарии:
1. TableView.источник данных = TableView
2. Куда бы мне это добавить? У HomePageTableView нет источника данных-члена
3. Код источника данных не принадлежит ни классу контроллера представления, ни классу представления. Он принадлежит своему собственному классу.
4. Сейчас я просто помещаю данные в массив в HomePageTableView для простоты. Я загрузил проект, который реализовал все внутри UIViewController, и он работал нормально. Это просто не работает, когда я удаляю код tableview и помещаю его в собственный файл UITableView. Я помню, что именно так вы делали это в Obj-c, хотя
5. @SulaimanMajeed, как это что-то упрощает? табличные представления предназначены для использования в композиции по наследованию, а не для подклассов. Не в Objective-C, а не в Swift. за 7 лет разработки iOS я не сталкивался с примитивным вариантом использования, когда подкласс UITableView был бы правильным выбором. И реализация этого в ViewController — это просто плохая привычка, которая не умирает, поскольку она бездумно копируется неопытными разработчиками снова и снова.
Ответ №1:
Вы можете просто сделать это. Я думаю, это должно сработать, если все соединения в порядке.
class HomePageViewController: HomePageTableView {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Комментарии:
1. HomePageViewController — это UIViewController, а не HomePageTableView. Он содержит только и управляет HomePageTableView
2. Извините, я неправильно понял ваш вопрос. Хорошо, что насчет этого вы создаете экземпляр своего tableview в HomePageTableView. Затем создайте функцию, которая просто выполняет tableview.reload() . Затем унаследуйте этот класс вместе с UIViewController в HomePageViewController и просто вызовите эту функцию.