为什么我的 UITableView 没有显示?

Wil*_*ers 1 uitableview ios swift3

我不明白为什么我的 TableView 没有显示。它可能有些愚蠢,但我所有的 MenuItemStruct 都是完整的并且不为空,而且我的表视图似乎对我来说设置正确。没有错误,但我的 cellForRowAt 方法没有被调用。请帮忙?

class MenuViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var menuNavigationDelegate: MenuNavigationDelegate?, menuManagerDelegate: MenuManagerDelegate?
    var conferenceId = "conferenceId-1"

    var isDataLoading = false


    @IBOutlet
    var menuTableView: UITableView?

    var menuItems = Array<MenuItemStruct>()

    @IBAction
    func closeMenuTapped() {
        self.menuManagerDelegate?.closeMenu()
    }


    override func viewDidLoad() {
        self.menuTableView?.register(UINib(nibName: "MenuTableViewCell", bundle: nil), forCellReuseIdentifier: "menuCell")
        self.isDataLoading = true
        MenuDataManager.getMenuInformation(conferenceId: self.conferenceId) {
            menuItems, response, error in
            self.menuItems = menuItems!
            self.isDataLoading = false
            DispatchQueue.main.async {
                self.menuTableView?.reloadData()
            }
        }
        self.menuTableView?.reloadData()
    }

    public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell:MenuTableViewCell = menuTableView!.dequeueReusableCell(withIdentifier: "menuCell", for: indexPath) as! MenuTableViewCell
        if (!self.isDataLoading) {
            cell.setUpCellWithData(menuItem: menuItems[indexPath.row])
        }

        return cell
    }

    public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if(!self.isDataLoading) {
            return self.menuItems.count
        }
        return 0;
    }

}
Run Code Online (Sandbox Code Playgroud)

MSU*_*dog 5

您需要设置表视图的委托和数据源。您已包含UITableViewDataSourceUITableViewDelegate协议,但尚未在代码中为您的 tableview 分配委托和数据源。

在您的viewDidLoad

self.menuTableView.delegate = self
self.menuTableView.dataSource = self
Run Code Online (Sandbox Code Playgroud)