我有UITableView我正在使用自定义单元格显示表格视图。
我的问题是当我滚动表视图时,单元格一次又一次地创建。
帮我解决这个问题。
感谢。
//的cellForRowAtIndexPath
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
ListOfProductsCell *cell =(ListOfProductsCell *)[tableView dequeueReusableCellWithIdentifier:@"tableCell"];
if (cell==nil) {
NSArray *nib =[[NSBundle mainBundle] loadNibNamed:@"ListOfProductsCell" owner:self options:nil];
cell = (ListOfProductsCell *)[nib objectAtIndex:0];
}
if (tableView == self.searchDisplayProduct.searchResultsTableView) {
searchProductItemDit=[searchProductListArry objectAtIndex:indexPath.row];
NSLog(@"searchdit:%@",searchProductItemDit);
cell.itemNameLbl.text= [searchProductItemDit objectForKey:@"name"];
self.searchDisplayProduct.searchResultsTableView.separatorColor=[UIColor colorWithRed:200.0 green:0.0 blue:0.0 alpha:1.0];
} else {
productItemDit=[productListArry objectAtIndex:indexPath.row];
NSLog(@"dit:%@",productItemDit);
cell.itemNameLbl.text=[productItemDit objectForKey:@"name"];
}
cell.itemImg.image = [UIImage imageNamed:@"profp.jpg"];
return cell;
}
答案 0 :(得分:3)
这样做,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"CellIdentifier";
ListOfProductsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
Create your custom cell here....
cell = [[[ListOfProductsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
return cell;
}
答案 1 :(得分:1)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"IDENT"];
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"IDENT"];
}
return cell;
}
像这样重用tableviewcell
答案 2 :(得分:0)
请注意,虽然其他答案是正确的,但如果您使用的是iOS6或更高版本,则应采用较新的API,要求您注册单元格并为其处理创建。
- (void)viewDidLoad {
[super viewDidLoad];
// Tell the tableview what cell you're using
[tableView registerClass:[MyCell class] forCellReuseIdentifier:@"CellIdentifier"];
// Or if you're using nibs tell the tableView which nib
[tableView registerNib:YourNib forCellReuseIdentifier:@"CellIdentifier"];
}
如果您正在使用Storyboard,则无需注册您的单元格,它已经为您完成了。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Will not return nil ever if you've registered your class.
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifier" forIndexPath:indexPath];
// Configure Cell
return cell;
}
答案 3 :(得分:0)
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (tableView == self.searchDisplayProduct.searchResultsTableView)
{
return [searchProductListArry count];
}
else
{
return [productListArry count];
}
return 0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *CellIdentifier = [NSString stringWithFormat:@"cell %d",indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
if (tableView == self.searchDisplayProduct.searchResultsTableView) {
searchProductItemDit=[searchProductListArry objectAtIndex:indexPath.row];
NSLog(@"searchdit:%@",searchProductItemDit);
cell.itemNameLbl.text= [searchProductItemDit objectForKey:@"name"];
self.searchDisplayProduct.searchResultsTableView.separatorColor=[UIColor colorWithRed:200.0 green:0.0 blue:0.0 alpha:1.0];
} else {
productItemDit=[productListArry objectAtIndex:indexPath.row];
NSLog(@"dit:%@",productItemDit);
cell.itemNameLbl.text=[productItemDit objectForKey:@"name"];
}
cell.itemImg.image = [UIImage imageNamed:@"profp.jpg"];
}
// Configure the cell.
return cell;
}
答案 4 :(得分:-1)
如果您使用的是ARC,请执行下面给出的cellForRowAtIndexPath方法。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YourIdentifier"];
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"YourIdentifier"];
}
return cell; }
如果您没有使用ARC,请执行下面给出的cellForRowAtIndexPath方法。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"YourIdentifier"];
cell = nil;
if(cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"YourIdentifier"] autorelease];
}
return cell;
}