контроллер модального представления не вызывает представление контроллера dismissModalViewControllerAnimated: метод - PullRequest
1 голос
/ 18 января 2012

В моем контроллере модального вида у меня есть метод обработки кнопок, который включает

[self dismissModalViewControllerAnimated: YES];

В представляемом контроллере представления я переопределяю dismissModalViewControllerAnimated: следующим образом:

-(void) dismissModalViewControllerAnimated: (BOOL)animated
{
  NSLog(@"dismiss");
  [super dismissModalViewControllerAnimated: animated];
}

При прикосновении к кнопке вызывается метод обработки кнопки, но dismissModalViewControllerAnimated: override, похоже, не вызывается: NSLog (@ "dismiss"); оператор не вызывается, и точка останова внутри метода не получает результата.

Я пытался

[[self presentingViewController] dismissModalViewControllerAnimated: YES];

но это тоже не сработало. Однако, модальный контроллер представления действительно отклонен.

Есть идеи, что может пойти не так?

Ответы [ 3 ]

2 голосов
/ 03 октября 2014

из Программирование для iOS 6, Мэтт Нойбург :

На iPad, когда представленный контроллер представления представляет собой modalPresentationStyle UIModalPresentationCurrentContext, необходимо принять решение относительно того, какое представлениеконтроллер должен быть представлен представлением контроллера представления ViewController.Это определит, какое представление будет заменено представлением представленного контроллера представления.Это решение включает другое свойство UIViewController, definePresentationContext (BOOL).Начиная с контроллера представления, на который был отправлен presentViewController: animated: complete:, мы переходим к цепочке родительских контроллеров представления, ища тот, у которого свойство definePresentationContext имеет значение YES.Если мы найдем один, это один;это будет представляющий ViewController, и его представление будет заменено представлением представленного контроллера представления.Если мы его не найдем, все будет работать так, как если бы у modalPresentationStyle представленного контроллера представления был UIModalPresentationFullScreen.

TL; DR
1. Установите для definesPresentationContext значение true для желаемого presentingViewController
2. установите modalPresentationStyle на UIModalPresentationCurrentContext на желаемом presentedViewController

2 голосов
/ 18 января 2012

Обычно это выполняется путем объявления вашего представительного контроллера представления в качестве делегата для вашего модального контроллера представления. Модальный VC затем вызвал метод делегата в текущем VC, чтобы отклонить созданный им модальный переход.

Пример:

Модальные VC.h:

@protocol ModalViewControllerDelegate
-(void)dismissMyModalViewController;
@end

Модал VC.m:

// When you want to dismiss the Modal VC
[delegate dismissMyModalViewController]; 

Представление VC.h:

// Make sure to #import ModalVC.h
@property (nonatomic, retain) id <ModalViewControllerDelegate> delegate;

Представление VC.m:

-(void)dismissMyModalViewController {
    [self dismissModalViewControllerAnimated:YES];
}
0 голосов
/ 18 января 2012

Код, представляющий контроллер модального представления, содержался в UIViewController, который, в свою очередь, содержался в UINavigationController. Когда я позвонил

[[self presentingViewController] dismissModalViewControllerAnimated: YES];

или

[self dismissModalViewControllerAnimated: YES];

сообщение об увольнении отправлялось объекту UINavigationController.

...