Iphone 细胞重复出现问题

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

我使用以下方法将单元格加载到表中。文本为“No Results”的单元格在我滚动时被重复。我在排队的时候做错了什么

    - (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
    'd

  • 根据您发布的代码和看到的问题,看起来
    sectionArray
    是空的。在哪里填的


  • 抱歉,我删除了很多代码,但我正在添加标签,因为我正在自定义外观,所以它们看起来不像常规的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
    子视图添加。我强烈建议你在网上阅读苹果的文档。这肯定会让你的生活轻松一点。