У меня есть PreviewController
: UIViewController
, который используется для отображения документа в полноэкранном режиме. Он входит в состав UINavigationViewController
. Также является делегатом от UISplitViewController
.UIViewController освобождается до вызова метода делегата
Когда он толкается, он скрывает masterView
от UISplitViewController
. (Методы 1 - 3 - 2 называются)
Когда он исчезает (при нажатии кнопки «назад»), он показывает masterView
из UISplitViewController
. (Методы 4 - 2 называются)
Но есть способ принудительного закрытия PreviewController
. В этом случае вызывается только метод 4, и PreviewController
освобождается до того, как UISplitViewController
может отправить сообщение и позвонить по методу 2.
Как решить эту проблему? Есть ли способ заставить UISplitViewController
назвать метод делегата? Или я могу сохранить PreviewController
в методе 4 и отпустить его в методе 2 (используя ARC)?
// Method 1
- (void)viewDidLoad
{
[super viewDidLoad];
self.hideMaster = YES;
UISplitViewController *splitViewController = [(AppDelegate *)[[UIApplication sharedApplication] delegate] splitViewController];
splitViewController.delegate = self;
}
// Method 2
- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
return self.hideMaster;
}
// Method 3
- (void)viewWillAppear:(BOOL)animated
{
self.hideMaster = YES;
UISplitViewController *splitViewController = [(AppDelegate *)[[UIApplication sharedApplication] delegate] splitViewController];
[splitViewController.view setNeedsLayout];
[splitViewController willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
}
// Method 4
- (void)viewWillDisappear:(BOOL)animated
{
self.hideMaster = NO;
UISplitViewController *splitViewController = [(AppDelegate *)[[UIApplication sharedApplication] delegate] splitViewController];
[splitViewController.view setNeedsLayout];
[splitViewController willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
}
// PreviewController is created in UIViewController which belongs to UINavigationController
PreviewController *previewVC = [[PreviewController alloc] initWithNibName:@"PreviewController" bundle:nil];
previewVC.documentURL = url;
[self.navigationController pushViewController:previewVC animated:YES]
Где и как создается экземпляр PreviewController? Можете ли вы опубликовать код для этого? – Leijonien
Добавил эту информацию в раздел вопросов. – GxocT