Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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)
}

Ответ 3

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

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

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

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

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

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

Ответ 4

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

несколько модалов

  • Проведите свой модальный переход от синего (представления) Просмотр контроллера к модальному контейнеру (который является обычным View Controller)
  • Модальный контейнер содержит только Container View, единственная цель которого - встраивание панели управления таблицами.
  • Вставить Панель управления вкладками внутри Контейнеp >
  • Каждая вкладка может быть отдельным View Controller, представляющим "несколько модалов"
  • Установите Панель управления вкладками панель вкладок на скрыто
  • Переключение между модалами с помощью tabBarController?.selectedIndex = 1
  • Закройте modal обычно с помощью dismissViewControllerAnimated(true, completion: nil)

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

введите описание изображения здесь

Ответ 5

Установите правильный 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;
}];`

Ответ 6

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

    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)