Попытка передать данные между 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];
}