无法将单元格出列

时间:2015-12-23 09:43:19

标签: ios swift uitableview

像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的故事板

4 个答案:

答案 0 :(得分:1)

提供自定义单元格的标识符。 根据您的代码let cellReuseIdentifier = "cell" 它应该是cell

如果您不使用Storyboard,则必须注册自定义单元格

[self.tableView registerClass: [CustomCell class] forCellReuseIdentifier:@"cell"];

enter image description here

答案 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()

中注册您的UITableViewCell类
    self.autoCompleteTableView.registerClass(UITableViewCell.classForCoder(), forCellWithReuseIdentifier: "cell")

然后在cellForRow中使用原始代码:

let cellReuseIdentifier = "cell"
let cell: UITableViewCell = autoCompleteTableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier, forIndexPath: indexPath) as UITableViewCell