在我的桌面视图中我有最后一个单元格,在第一张图片中看不到最初可见,当我向上滚动列表时,你可以在第二张图片中看到价格或我的detailTextLabel放在一个新行上保持正确的理由。
image 1 http://img706.imageshack.us/img706/4496/iphoneerror1.jpg
image 2 http://img706.imageshack.us/img706/6007/iphoneerror2edited.jpg
这是代码,我无法弄清楚为什么它这样做,任何方向或帮助将非常感激
- (UITableViewCell *)tableView:(UITableView *)ltableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [ltableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell.
NSUInteger indexRow = [indexPath row];
switch (indexRow) {
case 0:{
NSCharacterSet *set = [NSCharacterSet whitespaceCharacterSet];
NSString *description = [[currentData objectForKey:@"Description"] stringByTrimmingCharactersInSet:set];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.accessoryType = UITableViewCellAccessoryNone;
cellShift = 1;
if (![description isEqualToString:@""]) {
cell.textLabel.text = @"";
cell.detailTextLabel.text = description;
cell.detailTextLabel.numberOfLines = 2;
}
else {
cell.textLabel.text = @"";
cell.detailTextLabel.text = @"";
cell.detailTextLabel.numberOfLines = 0;
}
break;
}
default:{
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
NSDictionary *item = [tableData objectAtIndex:(indexRow-cellShift)];
NSString *name = [item objectForKey:@"Name"];
if ([name length] > MaxVendorsLength ) {
name = [NSString stringWithFormat:@"%@ ...",[name substringToIndex:MaxVendorsLength]];
}
cell.textLabel.text = name;
cell.textLabel.minimumFontSize = 12;
NSString *priceString;
float price = [[item objectForKey:@"Price"] floatValue];
//NSLog(@"| %@ | : | %@ |",[item objectForKey:@"Name"], [item objectForKey:@"Price"]);
if (price != 0) {
priceString = [[NSString alloc] initWithFormat:@"$%.2f",price];
}
else {
priceString = [[NSString alloc] initWithString:@"--"];
}
cell.detailTextLabel.text = priceString;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
[priceString release];
break;
}
}
cell.textLabel.font = [UIFont boldSystemFontOfSize:15];
cell.textLabel.minimumFontSize = 14;
cell.detailTextLabel.font = [UIFont boldSystemFontOfSize:15];
cell.detailTextLabel.minimumFontSize = 14;
return cell;
}
如果我需要发布任何其他内容以获取帮助,请告诉我???
答案 0 :(得分:9)
这是因为当您向上滚动时,顶部单元格会被重复使用,因为所有单元格都具有相同的单元格标识符(您拥有的第一行)。您需要声明两个单元格标识符,并根据您尝试获取的行使用相应的标识符。
static NSString *FirstRowCellIdentifier = @"A";
static NSString *OtherRowCellIdentifier = @"B";
NSString *cellIdentifier = nil;
if ([indexPath row] == 0)
cellIdentifier = FirstRowCellIdentifier;
else
cellIdentifer = OtherRowCellIdentifier;
UITableViewCell *cell = [ltableView dequeueReusableCellWithIdentifier:cellIdentifier];
// .....
然后您可以按原样使用其余代码。这只是确保重用的单元格类型正确。
答案 1 :(得分:2)
您对所有行使用相同的单元格标识符,但第0行具有不同的样式。向上滚动时,可能会重新使用字幕样式的单元格。
尝试为第0行使用不同的单元格标识符。在开关外只保留cell
的声明,并将dequeueReusableCellWithIdentifier移动到每个case。
答案 2 :(得分:1)
(UITableViewCell *)tableView:(UITableView *)ltableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {