像TableView一样出现问题:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cellReuseIdentifier = "cell"
let cell: UITableViewCell = autoCompleteTableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier, forIndexPath: indexPath) as UITableViewCell
let index = indexPath.row as Int
cell.textLabel!.text = tableArray[index]
return cell
}
当我运行应用程序时,我得到:"unable to dequeue a cell with identifier cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard"
。我在这里做错了什么?
编辑:
我没有使用这个UITableView的故事板
答案 0 :(得分:1)
提供自定义单元格的标识符。
根据您的代码let cellReuseIdentifier = "cell"
它应该是cell
如果您不使用Storyboard
,则必须注册自定义单元格
[self.tableView registerClass: [CustomCell class] forCellReuseIdentifier:@"cell"];
答案 1 :(得分:1)
如果您没有使用故事板,那么您可以使用您的cellIdentifier创建默认的UITableViewCell:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
此代码尝试查找具有给定标识符的UITableViewCell
。如果不这样做,它会创建一个带有给定标识符的新UITableViewCell
,并将其添加到UITableView
。
答案 2 :(得分:1)
在viewDidLoad
或您想要的任何地方(您只需运行一次),您必须注册标识符,同样适用于UITableViewCell
autoCompleteTableView.registerClass(
UITableViewCell.self,
forCellReuseIdentifier: "cell"
)
答案 3 :(得分:0)
您应该使用原始代码,因为它比以下方法更好:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
您唯一需要做的就是在viewDidLoad()
self.autoCompleteTableView.registerClass(UITableViewCell.classForCoder(), forCellWithReuseIdentifier: "cell")
然后在cellForRow中使用原始代码:
let cellReuseIdentifier = "cell"
let cell: UITableViewCell = autoCompleteTableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier, forIndexPath: indexPath) as UITableViewCell