【发布时间】:2016-07-26 19:02:45
【问题描述】:
我刚开始使用 Swift 和 xCode,目前正在搞乱 UITableView,我无法仅将“测试”写入表格。
我在Storyboard中创建了一个UITableViewController,为其指定了一个自定义类(我的swift文件如下),填写'ClientCell'作为单元格的重用标识符,代码如下:
class TableViewController: UITableViewController {
@IBOutlet var clientTable: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
clientTable.dataSource = self.dataSource;
clientTable.delegate = self;
}
func numberOfRowsInSection(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("ClientCell", forIndexPath: indexPath) as! CustomTableViewCell
cell.tableLabel.text = "test"
return cell
}
}
在故事板中,我在原型单元格中添加了一个“UILabel”,并在 CustomTableViewCell.swift 中为其创建了一个名为“tableLabel”的插座。 在做如此简单的事情时,我对所有需要考虑的事情感到困惑。 当我运行它时,模拟器只显示一个带有很多水平线的表格,但没有显示“测试”。
【问题讨论】:
-
您正在 viewDidLoad() 覆盖中编写 tableview 数据源方法。没有办法永远有效。将 numberOfRowsInSection 和 cellForRowAtIndexPath 移动到类扩展中,并在任何其他函数体之外声明它们。
-
@Dare 加入类扩展,你的意思是在 viewDidLoad() 之前?
-
@Dare 我不确定这是否适用于 UITableViewController 以同样的方式。我得到:“TableViewController”与协议“UITableViewDataSource”的冗余一致性
-
无需再次符合委托和数据源。只是扩展类。即使没有扩展它也可以工作。但是你不能遵守 viewDidLoad() 内部的协议。它必须是不在该函数体内的类级别声明。