UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
和
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]
当我用 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]
的时候总报错
reason: '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'
可恶的是我的cell 就用的系统的,所以不存在让我注册nib的问题吧。
官方这样解释
// Beginning in iOS 6, clients can register a nib or class for each cell.
// If all reuse identifiers are registered, use the newer -dequeueReusableCellWithIdentifier:forIndexPath: to guarantee that a cell instance is returned.
好吧。我改用 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];,这时候,就没有问题了。
这样搭配:1:
self.baseTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, naviView.bounds.size.height+40, naviView.bounds.size.width, self.view.frame.size.height-naviView.bounds.size.height) style:UITableViewStylePlain];
self.baseTableView.delegate = self;
self.baseTableView.dataSource = self;
[self.view addSubview:self.baseTableView];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (!cell) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
cell.textLabel.text = @"测试";
}
return cell;
}或者这样搭配2:
self.baseTableView = [[UITableView alloc]initWithFrame:CGRectMake(0, naviView.bounds.size.height+40, naviView.bounds.size.width, self.view.frame.size.height-naviView.bounds.size.height) style:UITableViewStylePlain];
self.baseTableView.delegate = self;
self.baseTableView.dataSource = self;
[self.baseTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
[self.view addSubview:self.baseTableView];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self.baseTableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
cell.textLabel.text = self.cellStr;
return cell;
}注册的这个,也可以是 registerNib
在使用 `dequeueReusableCellWithIdentifier:forIndexPath:` 时遇到错误提示,原因是因为没有注册 nib 或类。官方建议可以注册 nib 或类,或者使用 `dequeueReusableCellWithIdentifier:`。通过两种不同的代码实现方式解决了问题:1. 直接复用,如果为空则创建新的 UITableViewCell;2. 先使用 `registerClass: forCellReuseIdentifier:` 进行注册,再复用。
1万+

被折叠的 条评论
为什么被折叠?



