我现在已经坚持这个问题好几天了,我还没弄明白..... 我从基于导航的模板创建了我的项目,它也自动生成了一个tableview。然后我添加了一些部分和一些行,并试图用简单的字符串填充表格的行。一切正常,直到表格达到一定长度的某些部分和行数。 然后第一行的内容也出现在最后两行中,我不明白为什么...... 请帮忙!!! 这是我的代码:
#import "RootViewController.h"
@implementation RootViewController
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release anything that can be recreated in viewDidLoad or on demand.
// e.g. self.myOutlet = nil;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 5;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
if (indexPath.section == 0) {
if (indexPath.row == 0) {
cell.textLabel.text = @"test";
}
}
return cell;
}
- (void)dealloc {
[super dealloc];
}
@end
更新:
好吧所以我想我已经得到了但我不知道实际发生了什么事只是巧合,但当我改变了界限时:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
为:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
它有效......
有人可以向我解释这个???? ; - )
答案 0 :(得分:0)
正如您已经注意到的,这是由于可重用单元的工作方式。
但是,您确实应该重复使用您的单元格,并始终在tableView: cellForRowAtIndexPath:
中重置其内容。
例如,你可以这样做:
cell.textLabel.text = @"";
if (indexPath.section == 0) {
if (indexPath.row == 0) {
cell.textLabel.text = @"test";
}
}
但通常你会为每个细胞提供适当的内容。
编辑:您应该真正阅读Table View Programming Guide,但这是此问题的重要摘录:
表格视图的
tableView:cellForRowAtIndexPath:
数据源实现应该始终在重用单元格时重置所有内容。