所以我不确定这个dequeueReusableCellWithIithntifier是如何工作的,以及我正在寻找什么是可能的。我有一个带BOOL showIcon的自定义UITableViewCell。在TableViewCell中,如果它是真的,我会显示它,否则,我不会在我的单元格上显示此图标。在我的cellForRowAtIndexPath中,我从模型中获取数组中的对象,并将其设置为UITableViewCell属性。
这首先适用于我的屏幕上可见的内容。然后,当我向下滚动表格时,它不起作用,我应该看到的showIcon值不显示。然后当我滚动回到顶部时,那里的原始图标不在那里。在这种情况下,dequeueReusableCellWithIdentifier仍然是我想要使用的吗?或者我在设置和显示数据时做错了什么?谢谢一堆。
CODE:
在我的自定义UITableViewCell上,我有一个
BOOL showIcon;
在我的cellForRowAtIndexPath方法中,我使用UINib方式获取我的自定义UITableViewCell:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
static NSString *OrderTableViewCellIdentifier = @"OrderTableViewCellIdentifier";
OrderTableViewCell *cell = (OrderTableViewCell *)[tableView dequeueReusableCellWithIdentifier:OrderTableViewCellIdentifier];
if (cell == nil) {
UINib *cellNib = [UINib nibWithNibName:@"OrderTableViewCell" bundle:nil];
[cellNib instantiateWithOwner:self options:nil];
cell = self.TbvCell;
[cell.CheckmarkButton addTarget:self action:@selector(CheckmarkButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
self.TbvCell = nil;
}
Order *order = [orderArray objectAtIndexPath:row];
cell.order = order;
}
然后在我的TableViewCell中,它是这样的:
@property (nonatomic, retain) Order *order;
@property (nonatomic, retain) UIImageView *icon;
重写了setter:
- (void)setOrder:(Order *)newOrder {
if (!order.showIcon) {
icon.hidden = YES;
}
}
答案 0 :(得分:0)
是的,dequeueReusableCellWithIdentifier适用于任何自定义UITableViewCell子类。但是,请记住,此方法用于保存内存,因此您必须执行以下操作(即使没有子类,正常的UITableViewCells): 此方法返回已使用的UITableViewCell实例(如果表视图还没有足够的单元格,则返回nil)。这意味着细胞不会“空”;你需要清除并重新设置它的所有属性。例如,您需要能够从单元格的相应NSIndexPath中确定其图标是否必须是displayad,以及您想要使用的图标图像。 所以编辑你的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSUInteger row = [indexPath row];
static NSString *OrderTableViewCellIdentifier = @"OrderTableViewCellIdentifier";
OrderTableViewCell *cell = (OrderTableViewCell *)[tableView dequeueReusableCellWithIdentifier:OrderTableViewCellIdentifier];
if (cell == nil) {
UINib *cellNib = [UINib nibWithNibName:@"OrderTableViewCell" bundle:nil];
[cellNib instantiateWithOwner:self options:nil];
cell = self.TbvCell;
[cell.CheckmarkButton addTarget:self action:@selector(CheckmarkButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
self.TbvCell = nil;
}
// set your cell's properties to default values.
// e. g.: cell.showIcon = NO; and so on
Order *order = [orderArray objectAtIndexPath:row];
cell.order = order;
// then do a recustomization using the NSIndexPath's -row and -section properties
}
希望这会有所帮助。
答案 1 :(得分:0)
您的代码重用了您的单元格,因此您必须覆盖setOrder方法中的所有情况。试试:
- (void)setOrder:(Order *)newOrder {
if (!order.showIcon) {
icon.hidden = YES;
}
else {
icon.hidden = NO;
}
}
或更简单:
- (void)setOrder:(Order *)newOrder {
icon.hidden = !order.showIcon;
}