Как добавить пин-аннотацию на MKMap в режиме разделенного просмотра для ipad в режиме реального времени - PullRequest
2 голосов
/ 25 июля 2011

У меня проблемы с отображением аннотации на MKMap в Detailpane в базе Split-View

У меня есть таблица на главной панели (слева) (всплывающее окно), и когда я выбрал строку на главной панели, на панели сведений (справа) должна появиться аннотация, но это не так.

код в функции didSelectRowAtIndexPath в SecondViewController.m

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    DetailViewController *dTVC = [[DetailViewController alloc] init];
    Lat = 15.1025;
    Long = 100.2510;
    [dTVC setShowAnnotation];
}

отметил, что Lat и Long являются глобальной переменной

код в функции setShowAnnotation в DetailViewController.m

- (void)setShowAnnotation {
    [_mapView removeAnnotation:self.customAnnotation];
    self.customAnnotation = [[[BasicMapAnnotation alloc] initWithLatitude:Lat andLongitude:Long] autorelease];
    [_mapView addAnnotation:self.customAnnotation];
}

когда я выбрал строку, ничего не происходит, я должен связать функцию setShowAnnotion с кнопкой, и после того, как выбранная строка и ничего не происходит, нужно нажать эту кнопку, и появится аннотация. Итак, что я пропустил?

1 Ответ

0 голосов
/ 25 июля 2011

Вероятно, основная причина, по которой он не работает, заключается в том, что в didSelectRowAtIndexPath вы создаете новый экземпляр DetailViewController вместо использования уже отображенного экземпляра.

Новый созданный вами экземпляр также не отображается (отображается), поэтому, даже если setShowAnnotation работает, вы ничего не видите на экране.

В стандартном приложении на основе Split View основная панель слева называется RootViewController (то, что вы называете SecondViewController). В стандартном шаблоне уже есть detailViewController ivar, который указывает на отображаемый в данный момент экземпляр DetailViewController.

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

Затем в didSelectRowAtIndexPath вместо создания нового экземпляра DetailViewController просто вызовите setShowAnnotation на иваре:

[detailViewController setShowAnnotation];


Другая вещь, которую я хотел бы предложить, - вместо того, чтобы использовать глобальные переменные для «передачи» координат в подробный вид, добавить широту и долготу в качестве параметров в сам метод setShowAnnotation.

Таким образом, объявление метода будет выглядеть примерно так:

- (void)setShowAnnotationWithLat:(CLLocationDegrees)latitude 
                         andLong:(CLLocationDegrees)longitude;

и это будет называться так:

[detailViewController setShowAnnotationWithLat:15.1025 andLong:100.251];

и избавьтесь от глобальных переменных.

...