11

初めての iPad アプリケーションを作成しています。私の要件の 1 つは、UISplitviewcontroller と UINavigationController を処理することです。
提案されたビュー階層は

(LoginView) -> UINavigationView(LandingView + CollectionView) -> UISplitViewcontroller( DetailsView) です。

私たちのアプリはランドスケープモードのみをサポートしています。
私はこのSO の質問(および GILT アプリも) を参照しています。

だから私の質問は
1)誰かが小さなコードスニペットまたはチュートリアルへの参照を提供できる場合、どうすれば同じことを達成できますか
2)Apples HIGに従って、UISplitviewcontrollerはrootviewcontrollerである必要があります。Apple は私のアプリを拒否しますか?(どうやら GILT グループは承認されているようです
)MGSplitViewController、root 以外で使用できますか?
どんな助けでも大歓迎です。初心者として、私の質問が本物であることを願っています

4

5 に答える 5

12

すぐに使用できるsplitView を使用する場合は、root である必要があります。ここでのホケアリー・ポケリーは、りんごのガイドラインに違反するか、非常に奇妙な動作を示します。

MGSplitViewControllerは、SplitViewController の完全なカスタム実装です。そのようなことが必要な場合は非常に優れていますが、一部の機能は、アプリが方向付けられるという事実に基づいています。

または、自分で作成することもできます。私はこれを複数回行ったことがありますが、思ったより簡単です。

(LoginView) -> UINavigationView(LandingView + CollectionView) -> UISplitViewcontroller( DetailsView)。

すぐに使用できる UISplitView に基づいて、次のことをお勧めします。

  • splitView をルート ビューにします。

  • アプリが起動するとすぐに全画面モーダルをポップ (アニメーション化されません) し、ユーザーがこれで loginView、LandingView、および collectView をナビゲートできるようにします。ここで navController を使用することもお勧めします。

  • ユーザーが splitView に進む準備ができたら、splitView の rootView Controller と DetailViewController に必要なものを入力し、Modal をアニメーション化します。

デイブにはポイントがありますが、ユーザーから方向の選択を削除しているという観点から見ていきます。標準的な選択肢 (サポートされている方向など) を削除しても、設計者は構成によっては効率が良いと想定しているため、一部のユーザーを困らせるだけです。

于 2010-10-12T08:31:18.070 に答える
2

私は私の中にメソッドを作ることによってそれをしましたdetailViewController:

-(void)popHomeScreen:(BOOL)animated//OPENS THE HOMESCREEN IN A MODAL DISPLAY
{

  firstRun=NO;
    //myViewControllerForPopOver init here

    myViewControllerForPopOver.modalPresentationStyle = UIModalPresentationFullScreen;  


        myViewControllerForPopOver.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;//simple anime

    if (animated) [self presentModalViewController:myViewControllerForPopOver animated:YES];
        else [self presentModalViewController:myViewControllerForPopOver animated:NO];  
    }

次に、detailViewControllers ViewDidAppearメソッドで呼び出します。

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
if(firstRun)[self popHomeScreen:NO];
}

//YOU WILL ALSO NEED TO MAKE 'firstRun=YES' in viewDidLoad
//firstRun is a BOOL

ルートが消える (大きな黒いスペースが残る) ことは、既知のバグです。私はしばらくの間、アニメーションを描画する直前にアニメーションを注文したことが原因だと思っていました.

また、splitView の上にフルスクリーン モーダルをポップした場合、フルスクリーン モーダルが正しく描画されなかった直後に (たとえば) 別のフォーム ベースのモーダルをポップしたことがわかりました。

SplitView は義理の母のようなものです。あなたはあまり好きではありません。使用する必要がある場合は、地雷をつま先で回避する必要があります。

于 2010-10-17T12:19:38.523 に答える
2

これを試してください、それは私のために働きます

1) アプリ デリゲートの didFinishLaunchingWithOptions で、ログイン ビューをルート ビューにする

self.window.rootViewController = self.loginViewController;  

また、テンプレートと同じように分割ビューを初期化します (ただし、self.window には追加しません)。

MasterViewController *masterViewController = [[[MasterViewController alloc] initWithNibName:@"MasterViewController_iPad" bundle:nil] autorelease];
UINavigationController *masterNavigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];

    DetailViewController *detailViewController = [[[DetailViewController alloc] initWithNibName:@"DetailViewController_iPad" bundle:nil] autorelease];
    UINavigationController *detailNavigationController = [[[UINavigationController alloc] initWithRootViewController:detailViewController] autorelease];

    self.splitViewController = [[[UISplitViewController alloc] init] autorelease];
    self.splitViewController.delegate = detailViewController;
    self.splitViewController.viewControllers = [NSArray arrayWithObjects:masterNavigationController ,detailNavigationController, nil];

2) アプリのデリゲートにスワップ ビュー コントローラーを追加します。これにより、ルート ビューが分割ビュー コントローラーにスワップされます。

-(void)swapToViewControllers:(RootViewControllerType)viewType  
        self.window.rootViewController = self.splitViewController; 

3) ログイン ビューで swapToViewControllers を呼び出します。

于 2012-06-19T07:48:55.440 に答える
0

HIG は、すべてのオリエンテーションをサポートすることを強く推奨していることを覚えておいてください。ランドスケープのみをサポートする非常に正当な理由がない限り、おそらく拒否されるでしょう。

HIG の 19 ページを参照してください: http://developer.apple.com/library/ios/documentation/General/Conceptual/iPadHIG/iPadHIG.pdf

于 2010-10-11T19:46:13.587 に答える
0

Ryan CY のバージョンを絵コンテで修正。

このコードをログイン コントローラーに配置します。
1. UISplitViewController のストーリーボード ID を SplitViewController に設定します。
2. UISplitViewController デリゲートを設定し、インスタンスを保存します

UISplitViewController* splitController = [self.storyboard instantiateViewControllerWithIdentifier:@"SplitViewController"];
UINavigationController* navigationController = [splitController.viewControllers lastObject];
splitController.delegate = (id)navigationController.topViewController;
3. ログイン後に rootViewController を変更する
self.view.window.rootViewController = splitController;

于 2013-10-01T15:11:49.303 に答える