Поиск в табличном представлении аннотаций - PullRequest
1 голос
/ 04 января 2011

Я не знал, как настроить базу данных при запуске, поэтому у меня есть 80 аннотаций, которые выглядят так

workingCoordinate.latitude = 50.795825;
workingCoordinate.longitude = -1.103139;
MainViewAnnotation *Levant = [[MainViewAnnotation alloc] initWithCoordinate:workingCoordinate];
[Levant setTitle:@"Levant"];
[Levant setSubtitle:@"Unit R09, Gunwharf Quays"];
[Levant setAnnotationType:MainViewAnnotationTypePortsmouth];

[mapView addAnnotation:Levant];

Они сгруппированы в 22 города через MainViewAnnotationType, который кодируется следующим образом:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{
    return 21;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    if(section == MainViewAnnotationTypeBirmingham)
    {
        return @"Birmingham";
    }


    else if(section == MainViewAnnotationTypePortsmouth)
    {
        return @"Portsmouth";
    }

    return nil;
}

Затем аннотации помещаются в TableView следующим образом:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

    NSMutableArray *annotations = [[NSMutableArray alloc] init];

    if(indexPath.section == 0)
    {
        for(MainViewAnnotation *annotation in [mapView annotations])
        {
            if(![annotation isKindOfClass:[MKUserLocation class]])
            {
            if([annotation annotationType] == MainViewAnnotationTypeBirmingham)
            {
                [annotations addObject:annotation];
            }
            }
        }
        cell.textLabel.text = [[annotations objectAtIndex:indexPath.row] title];
    }
    ...
    else if(indexPath.section == 17)
    {
        for(MainViewAnnotation *annotation in [mapView annotations])
        {
            if(![annotation isKindOfClass:[MKUserLocation class]])
            { 
                if([annotation annotationType] == MainViewAnnotationTypePortsmouth)
                {
                    [annotations addObject:annotation];
                }
            }       
        }
        cell.textLabel.text = [[annotations objectAtIndex:indexPath.row] title];
    }

    return cell;

}

and then when a cell is clicked, will zoom in on the annotation.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    for(MainViewAnnotation *annotation in [mapView annotations])
    {
        if([[[[tableView cellForRowAtIndexPath:indexPath] textLabel] text] isEqualToString:[annotation title]])
        {   
            [mapView setRegion:MKCoordinateRegionMake([annotation coordinate], MKCoordinateSpanMake(.003, .003)) animated:YES];
        }
    }   
}

У меня вопрос, я хотел бы иметь возможность искать свои аннотации либо по их городу, либо по их имени. В моем интерфейсе уже есть контроллер панели поиска, и он подключен к моему табличному представлению, просто не написано никакого кода. Я бы хотел, чтобы поиск был скрыт, если я не нажму кнопку поиска, а затем скрою при нажатии на ячейку.

Новичок в Xcode, любая помощь, включая некоторые примеры кода, будет высоко ценится.

1 Ответ

0 голосов
/ 10 мая 2011

Я создал UITableView не программно, а с помощью Interface Builder. Создайте свой собственный ViewController и добавьте его в UITableView. Не забудьте установить (создателем интерфейса) делегат и источник данных. После этого я думаю, что вам будет проще управлять скрытой / показывать панель поиска. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...