IOS TableView-RegisterClass不显示内容



我刚刚开始学习一些IOS的东西,我正在使用Swift对我的应用程序进行编码。我在表视图中遇到了一个问题,由于某种原因,它们似乎没有在我的表视图中显示内容。

在我的视图控制器中,包含我在viewDidLoad()方法中的TableView:

self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: textCellIdentifier)

根据我看到的所有资源,它们似乎表明这是允许表视图显示UITableViewCell类型的列表项所需要的。运行程序时,tableView对象中似乎没有显示任何内容。我在某个地方找到了一个教程,他们写的有点不同。他们没有使用registerClass

self.tableView.delegate = self
self.tableView.dataSource = self

我用这个替换了registerClass方法,它似乎运行得很好。有人能解释一下为什么我的registerClass方法不起作用,以及其他解决方案为使其起作用做了什么吗?在IOS中,用视图对象分配这样的值是不是一种糟糕的做法?

您的第一行只是告诉表要使用哪类单元格(在本例中为UITableViewCell)。其他行(设置数据源和委托)告诉表从哪里获取数据,以及在发生更改时通知谁(比如有人单击单元格时)。

所以你需要有所有的三条线。您可以在Storyboard中完成部分/全部操作,因此某些教程可能不包含所有代码。

例如,如果您在故事板中使用静态或原型单元格,则不会包含registerClass。同样,如果您在故事板中为类绘制表视图,并以这种方式设置其dataSourcedelegate,则不会包括这些setter。

为了让数据显示在你的表上,你需要给它分配一个数据源(就像你的例子中一样),然后实现:

表视图:行数节:-告诉表应该有多少行(在给定的部分)

表视图:cellForRowAtIndexPath:-为表提供一个实际的单元格(属于您在上面注册的类型)

registerClass, forCellReuseIdentifier正是这样做的,每次需要一个新的单元格时,它都会从使用此方法注册的类中实例化。

self.tableView.dataSource = self告诉self.tableView它需要将self用于dataSource方法(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDataSource_Protocol/index.html#//apple_ref/swift/intf/UITableViewDataSource)它返回部分的数量、行的数量等。

如果不向tableView提供dataSource,它将始终为空(因为它不知道要显示的节、行、页眉、页脚等的数量,所以它将显示0)。

最新更新