2013-06-30 1 views
1

Я делаю приложение, в котором есть несколько контактов на карте. (с использованием xcode для приложений iOS). Когда я нажимаю на контакты, в выноске появляется кнопка раскрытия, которая при нажатии вызывает новый viewcontroller (который я использую в качестве подробного представления .. это правильно?)Возвращаясь к просмотру карты после открытия нового контроллера из кнопки раскрытия аннотации

I В настоящее время у меня возникают проблемы с возвратом к исходному контроллеру представлений после просмотра нового диспетчера представлений.

Как мне вернуться к просмотру карты?

Я пробовал с - (IBAction) Назад; и привязать его к кнопке на новом диспетчере представлений, однако, когда я нажимаю его на симуляторе, появляется черный экран, и на выходе не появляется ошибка.

Любая помощь будет оценена!

Я использовал следующее для просмотра нового контроллера вида:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control { 


    if ([view.annotation.title isEqualToString:@"..."]) { 

      ...Controller *sampleView = [[...Controller alloc] init]; 
      [self presentModalViewController:sampleView animated:YES]; 

    } 

    if ([view.annotation.title isEqualToString:@"..."]){ 
     ...ViewController *sampleView = [[...ViewController alloc] init]; 
     [self presentModalViewController:sampleView animated:YES]; 
    } 
} 

EDIT 1: Это код ошибки я получаю после внесения изменений ..

2013-06-30 18:02:30.386 lam[15156:13d03] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "...Controller" nib but the view outlet was not set.' 
*** First throw call stack: 
(0x1e2d012 0x126ae7e 0x1e2cdeb 0xf88c8 0xf8dc8 0xf8ff8 0xf9232 0x104c25 0x3043a3 0x101ee3 0x102167 0xfee0071 0x374c 0x10deb1a 0x10ea28e 0x82f617f 0x127e705 0x1b2c0 0x1b258 0xdc021 0xdc57f 0xdb6e8 0x4acef 0x4af02 0x28d4a 0x1a698 0x1d88df9 0x1db0f3f 0x1db096f 0x1dd3734 0x1dd2f44 0x1dd2e1b 0x1d877e3 0x1d87668 0x17ffc 0x2842 0x2775) 
libc++abi.dylib: terminate called throwing an exception 

ответ

0

Как вашего calloutAccessoryControlTapped «воспитывать» этот новый контроллер представления?

Если вы использовали модальный переход (например, presentViewController или modal segue), вы можете отменить его с помощью dismissViewControllerAnimated. Если вы использовали устаревший presentModalViewController, то вы должны использовать dismissModalViewControllerAnimated, но опять же вы, вероятно, не должны использовать устаревшие методы, если вам не нужна поддержка версий iOS до 5.0. Используйте вместо этого presentViewController и dismissViewControllerAnimated. Во всяком случае, вы могли бы в конечном итоге с IBAction способом, как:

- (IBAction)handleDoneButton:(id)sender 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

Если вы использовали нажимной переход (например, pushViewController или нажать SEGUE), то вы бы вообще просто воспользоваться себя кнопку встроенного «назад», но если вам нужна ваша собственная кнопка, чтобы поместить этот контроллер, вы должны использовать IBAction с popViewControllerAnimated. Например:

- (IBAction)handleDoneButton:(id)sender 
{ 
    [self.navigationController popViewControllerAnimated:YES completion:nil]; 
} 

Или, если ваш calloutAccessoryControlTapped использовал performSegueWithIdentifier, то вы можете либо использовать описанную выше технику, а в IOS 6 и выше, можно определить следующую разматывания SEGUE в контроллере представления, который имеет карту :

- (IBAction)backToMap:(UIStoryboardSegue *)segue 
{ 
    // do whatever you want 
} 

и тогда вы можете управление от Drag-кнопки на выход выхода в баре под сценой, и вы должны увидеть эту backToMap разматывание SEGUE.

Что касается вашей ошибки, это значит, что ваш корневой режим NIB не установлен. Выберите вид и посмотрите его выходы.Вы должны увидеть что-то вроде:

if view set up proper

Если нет, то (а) убедитесь, что вы установили «владелец файла», чтобы быть ваш взгляд класса контроллера; и (б) щелкните правой кнопкой мыши «Владелец файла»; (С) сопротивление от «O» рядом с «точки зрения» с точки зрения поповер фактического зрения:

enter image description here

Кроме того, при создании контроллера вида, вы, вероятно, хотите, чтобы указать, какой СИБ использовать:

ViewController *controller; 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
    controller = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil]; 
} else { 
    controller = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; 
} 
+0

Я просто обновил свой вопрос с кодом я использовал, чтобы открыть новый ViewController –

+0

большое спасибо. Где именно я должен убрать rejectpresentViewControllerAnimated? –

+0

@DCB Создайте метод 'IBAction' для вашей кнопки« увольнения »в вашем втором контроллере представления, а затем разместите там код' rejectModalViewControllerAnimated'. – Rob

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