UITableView внутри UIViewController не отвечает (Swift 3.0)

#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 и просто вызовите эту функцию.