0

私は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]
4

1 に答える 1

1

現在、PreviewController インスタンスへの強い参照を保持していません。インターフェイスに強力なクラス プロパティを追加するだけで十分です。

@property (nonatomic, strong) PreviewController *previewVC;

次に、次を使用してインスタンスを作成します。

self.previewVC = [[PreviewController alloc] initWithNibName:@"PreviewController" bundle:nil];

これにより、View Controller が動作している間 (自分で解放しない限り)、PreviewController の割り当てが解除されなくなります。

于 2013-11-15T10:45:22.930 に答える