Получение координат для UINavigationController в метод showDetails - PullRequest
0 голосов
/ 10 ноября 2010

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

- (void)showDetails:(id)sender {

 DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil ];

    // HERE I NEED TO PASS THE COORDINATES OF THE PIN TO THE DETAILVIEWCONTROLLER.
    [self.navigationController pushViewController:detailViewController animated:YES];
 [detailViewController release];
}


- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation {

 // If it's the user location, just return nil.
 if ([annotation isKindOfClass:[MKUserLocation class]])
  return nil;
 else { // Handles the other annotations.
  // Try to dequeue an existing pin view first.
  static NSString *AnnotationIdentifier = @"AnnotationIdentifier";
  MKPinAnnotationView *pinView = (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationIdentifier];

  if (!pinView) {
   // If an existing pin view was not available, creates one.
   MKPinAnnotationView *customPinView = [[[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationIdentifier] autorelease];
   customPinView.animatesDrop = YES;
   customPinView.canShowCallout = YES;

   // Adds a detail disclosure button.
   UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
   [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
   customPinView.rightCalloutAccessoryView = rightButton;

   return customPinView;
  } else
   pinView.annotation = annotation;
 }

 return nil;
}

Спасибо за чтение.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2010

Я не могу дать вам решение для работающего кода прямо сейчас, так как у меня нет моего Mac здесь. Но я могу рассказать вам о возможном подходе.

Создайте метод в DetailViewController, который заполняет его атрибуты, чтобы вы могли вызывать его из showDetails, прежде чем нажать его. Так что последовательность событий будет такой:

Нажмите кнопку раскрытия -> вызванные showDetails -> Создан и заполнен DetailViewController -> нажмите DetailViewController

Надеюсь, это помогло вам

0 голосов
/ 10 ноября 2010

Вы можете настроить свою кнопку UIButton следующим образом:

@interface CustomButton : UIButton {

CLLocationCoordinate2D pinCoordinate; }

Теперь в вашем представлении для аннотации:

// Adds a detail disclosure button.
CustomButton *rightButton = [CustomButton buttonWithType:UIButtonTypeDetailDisclosure];
rightButton.pinCoordinate = annotation.coordinate
[rightButton addTarget:self action:@selector(showDetails:)   forControlEvents:UIControlEventTouchUpInside];
customPinView.rightCalloutAccessoryView = rightButton;

И, наконец, получить координату в методе showDetails:

CLLocationCoordinate2D currentCoord = ((CustomButton*)sender).pinCoordinate;
...