【问题标题】:Adding a Table View Cell to a Table View within a View将表视图单元格添加到视图中的表视图
【发布时间】:2018-04-10 10:19:53
【问题描述】:

我有一个 UIView (MyView) 的子类,我已将它连接到一个 NIB 文件。

class MyView: UIView {

    @IBOutlet var contentView: UIView!
    @IBOutlet weak var tableView: UITableView!

    override init(frame: CGRect) {
        super.init(frame: frame)
        self.setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.setup()
    }

    let nibName = "MyView"

    private func setup() {

        let bundle = Bundle.init(for: type(of: self))
        bundle.loadNibNamed(nibName, owner: self, options: nil)

        contentView.frame = self.bounds
        contentView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
        self.addSubview(contentView)
    }

}

这个视图很简单;仅包含一个UITableView(或tableView)。但是,我想将UITableViewCellUILabel 添加到tableView,但情节提要不允许我这样做。

我知道MyView 不是视图控制器,因此不应该(如果遵循 MVC 模式)实现各种表视图数据源/延迟方法,但是,为什么我仍然可以不将此表格视图单元格添加到此自定义视图中的表格视图?

我的目标是拥有一些 UIViewController 子类,该子类具有 MyView 的实例,即

var myView = MyView(),

然后它控制数据源和委托方法,即

myView.tableView.dataSource = self.

最后,我附上了一个屏幕截图,显示我无法将此表格视图单元格添加到表格视图中。

【问题讨论】:

  • 我了解 MyView 不是视图控制器,因此无法实现各种表视图数据源/延迟方法 - 为什么不呢?
  • “我知道 MyView 不是视图控制器,因此无法实现各种表视图数据源/延迟方法”这是不正确,你可以class MyView: UIView, UITableViewDataSoruce {...} 和它应该可以正常工作...
  • 请以粗体查看编辑。我希望视图和控制器分开以遵循 MVC 设计模式。

标签: ios swift uitableview uiview


【解决方案1】:

您不能将原型单元格添加到 xib 文件中的表视图中 - 只能在情节提要中。

如果需要,您可以在一个 xib 中创建表格视图,并在另一个 xib 中创建表格视图单元格。

或者,您可以创建第二个故事板,其中包含一个表格视图并且它将支持单元原型。

【讨论】: