Уволить ModalViewController из другого viewController в подпредставлении - PullRequest
2 голосов
/ 04 мая 2011

У меня есть представление под названием A open с presentModalViewController методом, в этом представлении я загрузил вторичное представление, используя:

new_view = [[new_websongs alloc] initWithNibName:@"new_websongs" bundle:nil]; [mysubview addSubview:new_view.view]; хорошо, здесь все в порядке, но теперь мне нужно отклонить первоеПредставление «A» вызывает метод [self dismissModalViewControllerAnimated:YES], расположенный, если первый «A» viewController из вторичного контроллера представления (new_view), но не работает!код:

self.Aviewcontroller = [[Aview alloc] init];
[Aviewcontroller dismissModalViewControllerAnimated:YES];
[Aviewcontroller release];

Пожалуйста, помогите мне !!!!Спасибо

Ответы [ 5 ]

0 голосов
/ 21 августа 2012

Это работает, если вы представляете модальное представление из UISplitViewController.Это также может быть применено многими другими способами ...

Сначала создайте экземпляр в вашем .h файле для вашего appDelegate, (AppDelegate_iPad *appDelegate), затем поместите это в ваш viewDidLoad или аналогичный метод:

ipadDelegate = (AppDelegate_iPad *)[[UIApplication sharedApplication] delegate];

Теперь представьте первый модальный вид следующим образом:

    YOURVC *vc = [[YOURVC alloc] initWithNibName:@"YOURVC" bundle:nil];
    [ipadDelegate.splitViewController presentModalViewController:vc animated:YES];
    [vc release];

Скажем, у вас есть подпредставление, например UITableView, и вы хотите удалить модал из didSelectRowAtIndexPath.Все, что вам нужно сделать, чтобы отклонить ваш модал с помощью подпредставления, - это создать еще один экземпляр ipadDelegate внутри .h вашего подпредставления (при необходимости), снова сослаться на делегат [[UIApplication sharedApplication]] и отклонить:

[ipadAppDelegate.splitViewController dismissModalViewControllerAnimated:YES];

По сути, насколько это ни скучно, используйте контроллер вашего appDelegate для представления и отклонения модального режима, если вам нужно сохранять постоянную ссылку на presentingViewController ... потому что все вышеперечисленное просто не работает в моем случае.

Если вы выступаете с ipadDelegate, убедитесь, что вы проверили режим презентации в вашем MainWindow_iPad.xib.Ваш "Стиль перехода" должен быть "Вертикаль обложки", а "Презентация" должна быть "Текущий контекст", иначе ваш мод может быть представлен за другими видами.

0 голосов
/ 20 ноября 2011

попробуйте это должно работать

    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
0 голосов
/ 04 мая 2011

У вас есть логическая проблема.Начало чтения Руководство по программированию контроллера представления для iOS

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

0 голосов
/ 04 мая 2011

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

Конечно, вы можете установить количество контроллеров вида с помощью:

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated

без анимация, а затем, при необходимости, вызовите:

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated

, чтобы показать указанный контроллер представления дальше в вашем стеке контроллеров представления.

Надеюсь, это поможет подумать о том, что вам нужно делать?Часто полезно подумать о порядке и типе контроллеров представления в интерфейсе вашего приложения в отдельном проекте, где вы можете опробовать его на самом устройстве.

0 голосов
/ 04 мая 2011

Вы пробовали [self.parentViewController dismissModalViewControllerAnimated:YES];

...