2013-11-22 2 views
0

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

Я хочу передать название аннотации, чтобы кто-то нажал в mapKit на новый диспетчер представлений, чтобы я мог использовать этот заголовок в новом диспетчере представлений. Я использую метод 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?

+0

Вы используете раскадровки? –

+0

Да, я использую StoryBoards. Но я не использую никаких путей ... Я проталкиваю свои взгляды программно. – Cybernetic

+0

Что такое titleTime? Свойство string? И если да, то как вы можете ссылаться на self.titleTime и titleTime? В последних версиях Xcode переменная экземпляра базы данных свойства имеет префикс подчёркивания, поэтому вы знаете, когда используете свойство и когда используете iVar. Кроме того, что такое titleForDetail? Метка, UITextField или UITextView? Ваш код выглядит как titleForDetail is nil –

ответ

1

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

Изменение присутствующих:

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


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

1

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

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]; 
} 
+0

Правильно ... однако Анна была первой в вышеупомянутых комментариях. Но спасибо :) – Cybernetic

Смежные вопросы