【问题标题】:UITableView inside of UIViewController not responding (Swift 3.0)UIViewController 内的 UITableView 没有响应(Swift 3.0)
【发布时间】:2016-10-03 20:28:36
【问题描述】:

我在UIViewController 中实现了UITableView。我创建了一个名为HomePageTableView 的自定义类UITableView,并在情节提要中引用了它。下面是HomePageTableView和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.
    }


}

主页表视图:

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 放在自己的类中会更有用。

提前致谢!!

【问题讨论】:

  • tableView.datasource = tableView
  • 我会在哪里添加这个? HomePageTableView 没有成员数据源
  • 数据源代码既不属于视图控制器类,也不属于视图类。它属于它自己的类。
  • 为了简单起见,现在我只是将数据放入 HomePageTableView 中的一个数组中。我下载了一个在 UIViewController 中实现所有内容的项目,它运行良好。当我删除 tableview 代码并将其放入自己的 UITableView 文件时,它只是不起作用。我记得这就是你在 Obj-c 中的做法
  • @SulaimanMajeed,这如何简化任何事情?表格视图旨在用于继承方式的组合,而不是子类化。不在 Objective-C 中,不在 Swift 中。在 7 年的 iOS 开发中,我没有遇到过一个单一的用例,其中子类化 UITableView 是正确的选择。而在 ViewController 中实现这一点只是一个不会消失的坏习惯,因为它会被没有经验的开发人员一遍又一遍地漫不经心地复制。

标签: ios uitableview uiviewcontroller swift3


【解决方案1】:

您可以简单地执行此操作。如果所有连接都正常,我认为它应该可以工作。

class HomePageViewController: HomePageTableView {

      override func viewDidLoad() {
           super.viewDidLoad()
     }

}

【讨论】:

  • HomePageViewController 是 UIViewController,而不是 HomePageTableView。它只包含和控制 HomePageTableView
  • 对不起,我误解了你的问题。好吧,那你在 HomePageTableView 中创建一个 tableview 的实例。然后创建一个简单地执行 tableview.reload() 的函数。然后继承这个类以及 HomePageViewController 中的 UIViewController 并简单地调用该函数。
猜你喜欢
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多