我正在尝试使用自定义UITableViewCell,并且我将它放在与UITableView控制器相同的nib文件中。为此,文件是:NTItems.h,NTItems.m和NTItems.xib。
我在头文件中定义了单元格:
IBOutlet UITableViewCell *cellview;
我正确地应用了这个属性:nonatomic,保留所以它就在那里:
@property (nonatomic, retain) IBOutlet UITableViewCell *cellview;
在m文件中 - 我合成了变量设备,并使用它来获取自定义单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"cellview";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = self.cellview;
}
Product *aProduct = [appDelegate.products objectAtIndex:indexPath.row];
name.text = aProduct.name;
upc.text = [NSString stringWithFormat:@"UPC%@",aProduct.upc];
price.text = aProduct.pid;
return cell;
}
然而,当我加载桌子时,我得到了这个可怕的混乱:
alt text http://dl.dropbox.com/u/1545603/tablecellissue.png
还应该有超过1个单元格显示数据。似乎现在只显示最后一个数据。
答案 0 :(得分:1)
您无法重复使用此类插座中的单个单元格。想一想:每次拨打tableView:cellForRowAtIndexPath:
时,你都会返回同一个小区。如果可能的话,请求tableView将单元格出列,并且每次都不创建新单元格,这是你的工作。
相反,将自定义单元格存储在单独的笔尖中,并在出列失败时在if (cell == nil) { }
代码中读取该笔尖。
包含自定义单元格的nib文件应该具有其文件所有者NSObject,并且它应该只包含单元格的nib(没有其他对象)。
我使用此函数加载nib:
- (id)loadObjectFromNibNamed: (NSString *)inName;
{
id objectsInNib = [[NSBundle mainBundle] loadNibNamed: inName
owner: self
options: nil];
NSAssert1( objectsInNib != nil, @"loadNibNamed %@ returned nil", inName );
NSAssert2( [objectsInNib count] == 1, @"lodNibNamed %@ returned %d items", inName, [objectsInNib count] );
return [objectsInNib objectAtIndex: 0];
}
然后在tableView:cellForRowAtIndexPath:
我有:
if ( cell == nil ) {
cell = [self loadObjectFromNibNamed: nibName];
}
(我使用与我的单元格重用标识符相同的笔尖名称。)
答案 1 :(得分:1)
发生的事情是你只在整个桌子上使用一个单元格。这意味着绘制的最后一个单元格是唯一可见的单元格。先前的细胞基本上不存在。
您需要查看此document,了解如何从NIB创建自定义表格视图单元格。
那里有分步说明。