通过xib加载UITableViewCell的新方式
来源:互联网 发布:java解析xml文件实例 编辑:程序博客网 时间:2024/06/05 11:26
我们以前通常会这样做
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{static NSString *CellIdentiferId = @"MomentsViewControllerCellID";
MomentsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentiferId];
if (cell == nil) {
NSArray *nibs = [[NSBundle mainBundle]loadNibNamed:@"MomentsCell" owner:nil options:nil];
cell = [nibs lastObject];
cell.backgroundColor = [UIColor clearColor];
};
}
return cell;
}
严重注意:我们之前这么用都没注意过重用的问题,这样写,如果在xib页面没有设置 重用字符串的话,是不能够被重用的,也就是每次都会重新创建,这是严重浪费内存的,所以,需要修改啊,一种修改方式是使用如下ios5提供的新方式:
- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier
还有就是在xib页面设置好(ios5之前也可以用的)
如果忘了在xib中设置,还有一种方式 http://stackoverflow.com/questions/413993/loading-a-reusable-uitableviewcell-from-a-nib
NSArray * nibObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:nil options:nil];for (id obj in nibObjects){ if ([obj isKindOfClass:[CustomTableCell class]]) { cell = obj; [cell setValue:cellId forKey:@"reuseIdentifier"]; break; }
}
还有更常用的
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{return[self.items count];}-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{UITableViewCell * cell =[tableView dequeueReusableCellWithIdentifier:@"myCell"];if(!cell){cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"myCell"];}cell.textLabel.text =[self.items objectAtIndex:indexPath.row];return cell;
}
但是现在有一种新的方式了,可以采用如下的方式
采用registerNib的方式,并且把设置都放在了willDisplayCell方法中了,而不是以前我们经常用的cellForRowAtIndexPath
这个方法我试了下,如果我们在xib中设置了 Identifier,那么此处的必须一致,否则会crash的
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
MyCustomCell * cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];
if (!cell)
{
[tableView registerNib:[UINib nibWithNibName:@"MyCustomCell" bundle:nil] forCellReuseIdentifier:@"myCell"];
cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];
}
return cell;
}
- (void)tableView:(UITableView *)tableView willDisplayCell:(MyCustomCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.leftLabel.text = [self.items objectAtIndex:indexPath.row];
cell.rightLabel.text = [self.items objectAtIndex:indexPath.row];
cell.middleLabel.text = [self.items objectAtIndex:indexPath.row];
}
0 0
- 通过xib加载UITableViewCell的新方式
- 通过xib加载UITableViewCell的新方式
- 通过xib加载UITableViewCell的新方式
- 通过xib加载UITableViewCell的新方式
- 重用从xib加载的UITableViewCell
- UITableViewCell派生类加载Xib
- iOS 解决xib加载UITableViewCell的宽度不适应问题
- xib的两种加载方式
- 加载xib文件的两种方式
- iOS 加载xib的两种方式
- Xib设计UITableViewCell然后动态加载
- Xib设计UITableViewCell然后动态加载
- xib加载图片方式
- Xib的两种加载方式,与xib建立关系的两种方式
- iOS 【通过xib加载描述window根控制器的view】
- iOS : 通过Nib/Xib来加载UIView的注意事项
- 自定义View(加载Xib方式)
- 加载cell的xib的两种方式
- 【数据结构队列的应用】用队列打印杨辉三角
- rabitmq 分析
- 二进制中1的个数
- Eclipse的Android工具解析
- C++拷贝构造函数与赋值函数的异同
- 通过xib加载UITableViewCell的新方式
- 技术书籍读书进度
- QML中多个动画的操作
- Java单例模式如何理解
- xml转字典 基于touchxml
- 将数字1-9分为三组,使每组构成一个3位数的平方数.
- 对于大学4年的反思
- 【设计模式总结篇】
- ORACLE(SEQUENCE)序列总结