我有PreviewController
:UIViewController
它用於全屏顯示文檔,它是UINavigationViewController
的一部分。 也是代表UISplitViewController
。在調用委託方法之前釋放UIViewController
當它被推動時,它隱藏了masterView
的UISplitViewController
。 (方法1 - 3 - 2被稱爲)
當它消失(通過按「後退」按鈕),它顯示masterView
UISplitViewController
。 (方法4 - 2被稱爲)
但有一種方法可以強制關閉PreviewController
。在這種情況下,只調用方法4並在UISplitViewController
可以發送消息並調用方法2之前取消分配PreviewController
。
如何解決此問題?有沒有辦法強制UISplitViewController
調用它的委託方法?或者我可以在方法4中保留PreviewController
,並在方法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