Iphone 细胞重复出现问题
我使用以下方法将单元格加载到表中。文本为“No Results”的单元格在我滚动时被重复。我在排队的时候做错了什么Iphone 细胞重复出现问题,iphone,objective-c,cocoa-touch,uitableview,Iphone,Objective C,Cocoa Touch,Uitableview,我使用以下方法将单元格加载到表中。文本为“No Results”的单元格在我滚动时被重复。我在排队的时候做错了什么 - (UITableViewCell *)tableView:(UITableView *)iTableView cellForRowAtIndexPath:(NSIndexPath *)iIndexPath { static NSString *kCellID = @"cellID"; UITableViewCell *aCell = [iTableVi
- (UITableViewCell *)tableView:(UITableView *)iTableView cellForRowAtIndexPath:(NSIndexPath *)iIndexPath {
static NSString *kCellID = @"cellID";
UITableViewCell *aCell = [iTableView dequeueReusableCellWithIdentifier:kCellID];
if (aCell == nil) {
aCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellID] autorelease];
}
if (iTableView == self.searchDisplayController.searchResultsTableView) {
if (self.isSearching) {
static NSString *aProgressIdentifier = @"SearchProgress";
aCell = [iTableView dequeueReusableCellWithIdentifier:aProgressIdentifier];
if (!aCell) {
aCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:aProgressIdentifier] autorelease];
}
aCell.userInteractionEnabled = NO;
UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectZero];
aLabel.text = @"Searching...";
aLabel.font = [UIFont systemFontOfSize:16.0f];
aLabel.textColor = [UIColor grayColor];
aLabel.textAlignment = UITextAlignmentCenter;
[aLabel sizeToFit];
aLabel.frame = CGRectMake(floorf((self.view.frame.size.width / 2.0f) - (aLabel.frame.size.width / 2.0f)), floorf((aCell.frame.size.height / 2.0f) - (aLabel.frame.size.height / 2.0f)), aLabel.frame.size.width, aLabel.frame.size.height);
[aCell addSubview:aLabel];
[aLabel release];
UIActivityIndicatorView *aSpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[aCell addSubview:aSpinner];
aSpinner.frame = CGRectMake(floorf((aCell.frame.size.width / 2.0f) - (aSpinner.frame.size.width / 2.0f)) - floorf(aLabel.frame.size.width / 2.0f) - 20.0f, floorf((aCell.frame.size.height / 2.0f) - (aSpinner.frame.size.height / 2.0f)), aSpinner.frame.size.width, aSpinner.frame.size.height);
[aSpinner startAnimating];
[aSpinner release];
} else {
Class anObject = [self.masterArray objectAtIndex:iIndexPath.section];
if ([anObject isKindOfClass: [NSArray class]]) {
NSArray *sectionArray = [self.masterArray objectAtIndex:iIndexPath.section];
if (sectionArray.count > 0) {
id aCellObject = [sectionArray objectAtIndex:iIndexPath.row];
if ([aCellObject isKindOfClass:[CMACustomer class]]) {
CMACustomer *aCustomerObject = aCellObject;
aCell.textLabel.
text = aCustomerObject.customerFullName;
aCell.detailTextLabel.text = nil;
} else if ([aCellObject isKindOfClass:[CMAReservation class]]) {
CMAReservation *aReservationObject = aCellObject;
aCell.textLabel.text = aReservationObject.fullName;
aCell.detailTextLabel.text = aReservationObject.orderDescription;
// aCell.detailTextLabel.text = aReservationObject.reservationTimeAndDate;
}
} else {
aCell.userInteractionEnabled = NO;
UILabel *aLabel = [[UILabel alloc] initWithFrame:CGRectZero];
aLabel.text = @"No Results.";
aLabel.font = [UIFont systemFontOfSize:16.0f];
aLabel.textColor = [UIColor grayColor];
aLabel.textAlignment = UITextAlignmentCenter;
[aLabel sizeToFit];
aLabel.frame = CGRectMake(floorf((self.view.frame.size.width / 2.0f) - (aLabel.frame.size.width / 2.0f)), floorf((aCell.frame.size.height / 2.0f) - (aLabel.frame.size.height / 2.0f)), aLabel.frame.size.width, aLabel.frame.size.height);
[aCell addSubview:aLabel];
[aLabel release];
}
}
}
} else {
NSString *aLocalizedTitle = [[self.defaultScopeArray objectAtIndex:iIndexPath.row] objectForKey:@"localizedTitle"];
NSString *aDefaultTitle = [[self.defaultScopeArray objectAtIndex:iIndexPath.row] objectForKey:@"defaultTitle"];
aCell.textLabel.text = CMALocalizedStringWithDefaultValue(aLocalizedTitle, aDefaultTitle);
if ([[[self.currentScopeArray objectAtIndex:iIndexPath.row] objectForKey:@"enabledByDefault"] boolValue]) {
aCell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
aCell.accessoryType = UITableViewCellAccessoryNone;
}
}
return aCell;
}
有几件事:
UILabel
添加到tableViewCell
。只需使用单元格的textlab
属性或detailtextlab
属性(取决于您使用的tableviewcell
类型)UILabel
,则应将其添加到tableViewCell
的contentView
属性中tableViewcell
时,您确实不应该alloc/init
它在if(!Cell){}
块之外,因为每次您循环使用tableViewcell
,另一个UILabel
是alloc/init
'dsectionArray
是空的。在哪里填的抱歉,我删除了很多代码,但我正在添加标签,因为我正在自定义外观,所以它们看起来不像常规的textLabel。SectionArray由以下内容填充:
NSArray*SectionArray=[self.masterArray objectAtIndex:iIndexPath.section]代码>我只是保留了我发布到minimumI的代码,我只是删除了代码并添加了我正在使用的完整代码。希望能有帮助。好吧,这里可能有很多问题。首先,我要检查:[self.masterArray objectAtIndex:iindepath.section]
是否返回非空数组。如果为空,这将解释为什么If(sectionArray.count>0){}
对每个单元格都会出错,给每个UILabel一个“No Results”。它不会将整个单元格更改为“No Resluts”。单元格正在加载,但当我滚动时,“无结果”文本将位于随机单元格的后面。您可能需要查看的另一件事是,对您的UIActivityIndicatorView
使用tableviewcell
的accessoryView
属性,而不是将其作为UITableViewCell
的子视图添加。我强烈建议你在网上阅读苹果的文档。这肯定会让你的生活轻松一点。