简体   繁体   中英

tableView:cellForRowAtIndexPath: not getting called when using searchbar

I have a viewcontroller with a nib - which has a tableview, searchbar and searchdisplaycontroller inside.

The searchdisplaycontroller's contentscontroller, results delegate, delegate and results datasource is wired to the viewcontroller in IB. The searchbar's delegate is wired to the view controller in IB. The main tableview is also wired to the viewcontroller and its loading items during runtime properly.

Everything seems to work except the resultstableview - it never gets populated and the tableView:cellForRowAtIndexPath: never gets called AFTER the user types into the searchbar - it only gets called to populate the main tableview.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    static NSString *CellIdentifier = @"CellIdentifier";

    // Dequeue or create a cell o f the appropriate type.
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    if (tableView.tag == 2)
    {
        cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

        // Configure the cell.
        NSHotel *selectedHotel = [[self hotelList] objectAtIndex:[indexPath row]];

        //Store the hotel id for use later
        selectedHotel.id = [indexPath row];

        //cell.textLabel.text = [NSString stringWithFormat:@"Catalonia Majorica", indexPath.row];
        cell.textLabel.text = [selectedHotel name];
    }
    else if (tableView.tag == 1)
    {
        cell.accessoryType = UITableViewCellAccessoryNone;

        // Configure the cell...    
        NSAirport *selectedAirport = nil;

        if (tableView == self.searchDisplayController.searchResultsTableView)
        {
            selectedAirport = [self.filteredListContent objectAtIndex:indexPath.row];
        }
        else
        {
            selectedAirport = [self.listContent objectAtIndex:indexPath.row];
        }

        //Set the label of the cell formatting the distance from the device 
        cell.textLabel.text = [NSString stringWithFormat:@"%@ - %@ miles", 
                               selectedAirport.name, [self formattedStringWithDecimal:selectedAirport.milesFromDevice]];

        //Adjust the front of the label
        cell.textLabel.font = [UIFont boldSystemFontOfSize:12];

    }

    return cell;
}

Fixed it - it was returning 0 here:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    {
        if (tableView == self.searchDisplayController.searchResultsTableView)
        {
            return [self.filteredListContent count];
        }
        else if (tableView.tag == 1)
        {
            return [self.listContent count];
        }
        else if (tableView.tag == 2)
        {
            // Return the number of rows in the section.
            return [[self hotelList] count];
        }

        NSLog(@"The rows in tableview!");
        return 0;
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM