Попытка передать данные между viewcontrollers - передать заголовок аннотации новому viewcontroller

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

Я хочу передать заголовок аннотации, которую кто-то нажимает в mapKit, в новый viewcontroller, чтобы я мог использовать этот заголовок в новом viewcontroller. Я использую calloutAccessoryControlTapped метод определения, когда кто-то нажал кнопку detailDisclosure, а затем использует следующий код для добавления заголовка к свойству во втором viewcontroller (который называется detailViewController):

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
    detailViewController *viewController = (detailViewController *)[storyboard instantiateViewControllerWithIdentifier:@"detailViewController"];

    detailViewController *detailView = [[detailViewController alloc] init];

    // THIS IS WHERE I SET THE ANNOTATION TITLE TO THE PROPERTY IN THE SECOND VIEWCONTROLLER
    detailView.titleTime = view.annotation.title; 

    NSLog(@"view.annotation.title: %@", view.annotation.title); // SHOWS THE TITLE
    NSLog(@"detailView.titleTime: %@", detailView.titleTime);   // SHOWS THE TITLE


    // HERE I PRESENT NEW VIEWCONTROLLER (HOPING THE TITLE IS PASSED)
    [self presentViewController:viewController animated:YES completion:nil];

}

Во втором viewcontroller (detailViewController) у меня это в viewDidLoad метод:

- (void)viewDidLoad
{
[super viewDidLoad];

// set the Title Label to the titleTime (passed from the mainViewController)
self.titleForDetail.text = self.titleTime;
NSLog(@"titleForDetail.text %@:", titleForDetail.text); // THIS IS NULL
 NSLog(@"titleForDetail.text %@:", titleTime); // THIS IS NULL
}

Почему self.titleForDetail.text а также self.titleTime NULL? Почему ничего не передается из оригинального viewController?

2 ответа

Решение

В calloutAccessoryControlTappedкод устанавливает titleTime собственность на detailView но потом представляя viewController (который не имеет установленного свойства).

Изменить подарок на:

[self presentViewController:detailView animated:YES completion:nil];


Похоже, вам не нужно storyboard а также viewController переменные, так что вы можете удалить их из этого метода.

У вас есть две строки в вашем коде:

    detailViewController *viewController = (detailViewController *)[storyboard instantiateViewControllerWithIdentifier:@"detailViewController"];
    detailViewController *detailView = [[detailViewController alloc] init];

А в остальной части кода вы иногда используете viewController, а иногда detailView. У вас должен быть только один из них, и его экземпляр должен создаваться так же, как и для viewController:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
    detailViewController *detailView = (detailViewController *)[storyboard instantiateViewControllerWithIdentifier:@"detailViewController"];
    detailView.titleTime = view.annotation.title;
    [self presentViewController:detailView animated:YES completion:nil];
}
Другие вопросы по тегам