私はPreviewController
:UIViewController
の一部であるドキュメントをフルスクリーンで表示するために使用されますUINavigationViewController
。のデリゲートでもありUISplitViewController
ます。
masterView
押すと隠れUISplitViewController
ます。(メソッド 1 - 3 - 2 が呼び出されます)
(「戻る」ボタンを押して)消えると、masterView
のが表示されますUISplitViewController
。(メソッド 4 - 2 が呼び出されます)
しかし、強制終了する方法がありPreviewController
ます。この場合、メソッド 4 のみが呼び出され、メッセージを送信してメソッド 2 を呼び出すPreviewController
前に割り当てが解除されます。UISplitViewController
この問題を解決するにはどうすればよいですか? 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]