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
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
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- .net平台推送ios消息的实现方法
- 探讨Android与iOS,我们将何去何从?
- Android、iOS和Windows Phone中的推送技术详解
- IOS 改变键盘颜色代码
- Android和IOS的浏览器中检测是否安装某个客户端的方法
- javascript实现阻止iOS APP中的链接打开Safari浏览器
- iOS开发之路--微博OAuth授权_取得用户授权的accessToken
- ios通过按钮点击异步加载图片
- 加载带有手势识别器的XIB文件需注意哪些问题
- 仅需几行代码实现方便易用的状态栏指示器
- ios中图像进行压缩方法汇总