27

iPad アプリでは、UISplitViewController を使用しています。アプリをポートレート モードで起動するときに、マスター ポップオーバーを強制的に表示する必要があります。

現在、このコードを使用していますが、iOS 5.0 で問題なく動作します。

if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
   if ([[[AppDelegate sharedAppDelegate] splitViewController] respondsToSelector:[[[AppDelegate sharedAppDelegate] btnMenu] action]]) {
      [[[AppDelegate sharedAppDelegate] splitViewController] performSelector:[[[AppDelegate sharedAppDelegate] btnMenu] action]];
   }            
}

しかし、iOS 5.1 (新しいタイプのマスター ポップオーバーを使用) では、動作はランダムに見えます。ポップオーバーがフルスクリーンで表示されることもあれば、うまく機能することもあります。

5.1の提案はありますか?

4

8 に答える 8

27

ここでは 5.1 についての提案はありませんが、8.0 については 1 つ:

iOS8 では、新しい設定方法がたくさんありUISplitViewControllerます。

あなたの場合、たとえば masterViewController に正しい値を設定するpreferredDisplayModeだけviewDidLoadです。

目的 C:

- (void)viewDidLoad {
    // configuring splitviewcontroller
    self.splitViewController.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;

    //....
}

迅速:

    override func viewDidLoad() {
        self.splitViewController?.preferredDisplayMode = UISplitViewControllerDisplayMode.AllVisible
    }

もちろんiOS8のみです。

于 2014-10-09T09:26:14.973 に答える
13

ロブの答えを拡張すると、これは私にとってはうまくいきます(詳細画面のviewDidLoadで):

//If in portrait mode, display the master view
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
    [self.navigationItem.leftBarButtonItem.target performSelector:self.navigationItem.leftBarButtonItem.action withObject:self.navigationItem];
}

代わりに self.navigationItem.leftBarButtonItem を使用して、別の参照をフェッチする必要はありません

于 2012-11-06T19:01:24.700 に答える
13

私はしばらくこれに苦労しましたが、今でも解決策に100%満足しているわけではありませんが、現在の制約を考えると、これが唯一の解決策です.

まず、次のデリゲート メソッドをオーバーライドします。

- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController

それを使用してバー ボタン アイテムへの参照を取得し、iVar に保存します。

barButtonForMaster = barButtonItem;

次に、マスター ビュー コントローラーを表示する場合は、次のように呼び出します。

[barButtonForMaster.target performSelector: barButtonForMaster.action withObject: barButtonForMaster];

最初にこれを実行したい場合は、アプリのクラッシュを防ぐために遅延を使用してください (有益なコメントのおかげです)。

[barButtonForMaster.target performSelector: barButtonForMaster.action withObject: barButtonForMaster afterDelay:1];

その場合、分割ビュー デリゲート メソッドでセレクターを実行できます。

于 2012-05-03T17:26:16.390 に答える
0

No need to keep silly references around to the barButtonItem. Simply call the same target/action. See my answer https://stackoverflow.com/a/25695923/1021430

The target is the split view controller, and the action is toggleMasterVisible:

于 2014-09-06T01:23:15.933 に答える