您的位置:首页 > 移动开发 > IOS开发

iOS tableview复用时候崩溃

2015-08-18 14:06 501 查看
tableView: cellForRowAtIndexPath:方法中有两个获得重用cell的方法

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios tableview