0

iPhone 6 で実行するアプリをプログラミングし、UISplitViewController を次のように使用します。

ここに画像の説明を入力

iPhone 6 plus で縦向きにテストしたところ、DetailView が表示されませんでした。Table2View を開いて横向きにすると、Table1View が左側に表示され、Table2View が右側に表示されます。左側に Table2View 表示、右側に DetailView 表示が必要です。どうすればいいですか?

解決策:ここで解決策を見つけました: UISplitViewController Rotation Master Master on iPhone 6 Plus。これは私のコードです:

- (UIViewController *)splitViewController:(UISplitViewController *)splitViewController
separateSecondaryViewControllerFromPrimaryViewController:(UIViewController *)primaryViewController {
    if ([primaryViewController isKindOfClass:[UINavigationController class]]) {
        UIViewController *topViewController = [(UINavigationController *)primaryViewController topViewController];
        if ([topViewController isKindOfClass:[Table2ViewController class]]) {
            return [topViewController.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
        }
    }

    return nil;
}

しかし今、私は他の問題を抱えています。このコード行で:

return [topViewController.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];

アプリは次のように表示されます。

ここに画像の説明を入力

アプリを縦向きに変更すると、このコードを実行した後にクラッシュします (NO を返します)。

- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController {
    if ([secondaryViewController isKindOfClass:[UINavigationController class]] && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]] && ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] item] == nil)) {
        // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
        return YES;
    }
    else {
        return NO;
    }
}

問題は、追加された DetailViewController が有効ではないことだと思います。どうすれば修正できますか?

解決策:私もこの問題を解決しました。これは完璧なサンプルです: https://developer.apple.com/library/prerelease/ios/samplecode/AdaptivePhotos/Introduction/Intro.html#//apple_ref/doc/uid/TP40014636

ありがとうございました。

4

1 に答える 1

0

で管理されている両方のビュー コントローラーを任意の向きで表示するには、 に設定するUISplitViewController必要があります。preferredDisplayModeUISplitViewControllerDisplayModeAllVisible

ビュー コントローラー階層のセットアップに関しては、ビュー コントローラーとビューを混同しているようです。単純に 2 つを並べて配置したい場合は、 s を s 内に埋め込もうとするのではなくUITableViews、マスター ビュー コントローラーと詳細ビュー コントローラーの両方を のインスタンスにしてみませんか?UITableViewControllerUITableViewControllerUIViewController

表記とクラスを使用すると、これは次のようになります。

UISplitViewController --masterview--> Table1ViewController
UISplitViewController --detailview--> Table2ViewController

注: 「セグエ」は「遷移」を意味します。セグエは、ユーザーがあるビュー コントローラーから次のビュー コントローラーに移動する方法を決定します。あるView Controllerを別のView Controllerに埋め込む方法については説明していません。

于 2014-10-30T19:09:03.493 に答える