it-swarm.com.ru

Представить несколько модальных контроллеров представления?

Обновление:
Я снова столкнулся с этой проблемой и нашел другой способ. Если представленный контроллер не встроен в навигационный контроллер, он будет скрыт, если представленный контроллер не является полноэкранным и станет черным. Метод setModalPresentationStyle: UIModalPresentationCurrentContext может быть применен только к контроллеру навигации. Так что вставьте представление контроллера в UINavigationController, установите для него UIModalPresentationCurrentContext и представьте новый контроллер - вы получите диалоговый контроллер.

Я представляю контроллер поиска, у него есть tableView, который нажимает на стек детализированный контроллер.

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

Проблема: когда последний контроллер представления представлен, все контроллеры представления под ним становятся скрытыми, а контроллер, представленный контроллер поиска, становится видимым.

Вот что я делаю:

SearchViewController *viewController = [[SearchViewController alloc] initWithNibName:@"SearchViewController" bundle:nil];
viewController.data = dataArray;

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
[self.navigationController setModalPresentationStyle:UIModalPresentationCurrentContext];
[self.navigationController presentViewController:navigationController animated:YES completion:nil];

чем таблица толкает подробный вид:

DetailViewController *viewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
[viewController setHidesBottomBarWhenPushed:YES];
viewController.dataItem = [data objectAtIndex:(NSUInteger) [indexPath row]];
[self.navigationController pushViewController:viewController animated:YES];

и подробный вид представления окна сообщения:

MessageController *controller = [[MessageController alloc] initWithNibName:@"MessageController" bundle:nil];
controller.message = message;
[self presentViewController:controller animated:YES completion:nil];

Когда он уволен, все контроллеры под ним стали видны.

Обновление:

все, что я хотел, это представить модально контроллер представления, который будет иметь uitableview. Из этой таблицы показан подробный вид, который сможет показать окно сообщения. Окно сообщения должно быть другим представлением контроллера. И когда отображается окно сообщения, все два предыдущих контроллера исчезают. это проблема.

13
trickster77777

Тривиальный способ добиться этого - просто создать VC Вы хотите представить модально и представить один за другим . К сожалению, это не сработает. То, что вы получаете, это только первое VC представлены, все остальные просто никуда не денутся. UIKit просто не будет сотрудничать с тобой здесь.

http://xissburg.com/presenting-multiple-modal-view-controllers-at-once/

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.view.layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
4
Gtx

Отключить все контроллеры представления выше представленного контроллера представления.

Документация Apple:

Если вы представляете несколько контроллеров представления подряд, тем самым создавая стек представленных контроллеров представления, вызов этого метода для контроллера представления, расположенного ниже в стеке, отклоняет его непосредственный дочерний контроллер представления и все контроллеры представления выше этого дочернего элемента в стеке. Когда это происходит, только самый верхний вид отклоняется в анимационном режиме; любые промежуточные контроллеры представления просто удаляются из стека. Самое верхнее представление отклоняется, используя его модальный стиль перехода, который может отличаться от стилей, используемых другими контроллерами представления ниже в стеке.

Уволить два модальных вида контроллеров.

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:NULL];

https://developer.Apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#jumpTo_51

10
Rei Kubonaga

В некоторых ситуациях каждый модально представленный контроллер представления может представлять следующий.

let window = UIApplication.sharedApplication().keyWindow!
if let modalVC = window.rootViewController?.presentedViewController {
    modalVC.presentViewController(vc, animated: true, completion: nil)
} else {
    window.rootViewController!.presentViewController(vc, animated: true, completion: nil)
}
9
SlimeBaron

Этот ответ может показаться немного необычным, но он работает. Это позволяет вам «открывать несколько модалов», но показывать только по одному за раз. Ключ должен иметь только один модальный режим, но используйте Контроллер панели вкладок для переключения между Просмотреть контроллер s.

 multiple modals

  1. Подключите ваш модальный переход от синего (представление) View Controller к модальному контейнеру (который является просто обычным View Controller)
  2. Модальный контейнер содержит только представление контейнера, единственная цель которого - встроить контроллер панели вкладок.
  3. Вставить Контроллер панели вкладок внутри Представление контейнера
  4. Каждая вкладка может быть отдельной View Controller, представляющей «несколько модальных режимов»
  5. Установите Контроллер панели вкладок 's Панель вкладок на скрыто
  6. Переключайтесь между модами с помощью tabBarController?.selectedIndex = 1
  7. Обычно закрывайте модальное dismissViewControllerAnimated(true, completion: nil) 

Это будет выглядеть примерно так:

 enter image description here

8
Robert Chen

Установите правильное значение modalPresentationStyle для обоих самого navigationController И самого viewController.

self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
vcToPresent.modalPresentationStyle = UIModalPresentationFormSheet;
vcToPresent.preferredContentSize = CGSizeMake(650, 450);

[self presentViewController:vcToPresent animated:YES completion:^{
    self.navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
}];`
1
rizzes

Я нашел решение: предоставить собственную анимацию:

    let transition: CATransition = CATransition()
    transition.duration = 0.5
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionReveal
    transition.subtype = kCATransitionFromBottom
    self.view.window!.layer.add(transition, forKey: nil)
    self.presentingViewController?.presentingViewController?.dismiss(animated: false, completion: nil)
0
Antzi