2

私は iPad/Universal アプリケーションを開発しており、UINavigationController を UISplitViewController のメインの詳細ビューとして処理するという問題に直面しています。私が知りたいのは、横向きのときにデフォルトのサイドコントローラーボタンを詳細コントローラーに追加する方法です。

意味

Split View Controller は次のように定義されています。

splitViewController = [[UISplitViewController alloc] init];

SideController *root = [[[SideController alloc] init] autorelease];
DetailController *detail = [[DetailController alloc] init];
InserisciDatiController *calcolo = [[[InserisciDatiController alloc]
                                     initWithNibName:@"InserisciDatiNuovi"
                                     bundle:[NSBundle mainBundle]]
                                    autorelease];

UINavigationController *rootNav = [[[UINavigationController alloc] initWithRootViewController:root]autorelease];
UINavigationController *calcoloNav = [[[UINavigationController alloc] initWithRootViewController:calcolo] autorelease];

splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, calcoloNav, nil];
splitViewController.delegate = detail;

その後、解放可能なすべてのオブジェクトを解放します。SideController詳細コントローラーの一種のインデックスとしてを使用しています。これにはテーブル ビューがあり、各行をクリックすると、詳細のメイン ビュー コントローラーが更新されます。新しいコントローラーはそれぞれ、常に UINavigationController のインスタンスです。

詳細を更新する

myAppDelegate *delegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
UINavigationController *nav = (UINavigationController *)[delegate.splitViewController.viewControllers objectAtIndex:1];
[nav setViewControllers:[NSArray arrayWithObjects:controller, nil]];

ユーザーがサイドビューコントローラーの行をタップすると、このコードを使用して詳細コントローラーを更新します。

横向きを処理する

非表示のサイドビューコントローラーを表示するデフォルトのツールバーボタンを追加したいときに、横向きを処理する方法を知りたいです。私ができないことは、このメソッドを使用してボタンを追加する詳細ナビゲーション コントローラーのツールバーを取得することです。

- (void)splitViewController:(UISplitViewController*)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem*)barButtonItem
       forPopoverController:(UIPopoverController*)pc

また、新しいコントローラーをナビゲーション コントローラーにプッシュすると、既定の [戻る] ボタンがツールバーに表示されます。この場合、ボタンの作成をどのように処理すればよいですか?

アップデート

お願いします、誰もこの種の問題を経験したことがないとは言わないでください! どのように iPad アプリを開発していますか? すすり泣き...

4

3 に答える 3

1

ナビゲーションコントローラーをきれいに扱う方法だとは思いませんが、誰かに役立つ方法を見つけました。

分割ビューコントローラーデリゲートでは、次のsplitViewController:willHideViewController:withBarButtonItem:forPopoverControllerように:メソッドを実装しました。

- (void)splitViewController:(UISplitViewController*)svc
     willHideViewController:(UIViewController *)aViewController
          withBarButtonItem:(UIBarButtonItem*)barButtonItem
       forPopoverController:(UIPopoverController*)pc
{
    barButtonItem.title = NSLocalizedString(@"menu", nil);

    myAppDelegate *app = (myAppDelegate *)[[UIApplication sharedApplication] delegate];

    UINavigationController *nav = [app.splitViewController.viewControllers objectAtIndex:1];
    UIViewController *ctrl = [nav.viewControllers objectAtIndex:0];

    if (!ctrl.navigationItem.backBarButtonItem && !ctrl.navigationItem.leftBarButtonItem) {
        ctrl.navigationItem.leftBarButtonItem = barButtonItem;
    }
}

ここでは、ナビゲーションコントローラーに戻るボタンまたは別のカスタム左ボタンアイテムが表示されていない場合にのみ、サイドビューコントローラーを表すポップオーバービューを表示するバーボタンアイテムを示します。

これが誰かに役立つことを願っています!

于 2011-05-10T20:14:42.853 に答える
0

Alterplay の Slava Bushtruk が、あなたが探しているものを見つけ出し、それを彼のAPSplitViewControllerライブラリで使用したと思います。

于 2011-05-23T19:10:00.413 に答える
0

あなたが良い答えを得られなかった理由は、あなたの問題を理解するのが本当に難しいからだと思います。まず、問題を正しく理解しているかどうかを確認させてください。ナビゲーション コントローラーで何かを押して、戻るボタンと分割ビュー ボタンの両方を表示する必要がある場合の処理​​方法がわからないという問題はありますか?

もしそうなら、その問題を解決した方法は、分割ビュー ボタンがナビゲーション コントローラーのルートにのみ表示されるようにすることです。サイドコントローラーは通常、詳細ビューのルートビューコントローラーにのみ関連します。

問題を誤解した場合、または私の解決策がプロジェクトに適用できない場合は、お知らせください。

編集:したがって、これを行うことを主張する場合は、次の方法があります。

toolbar = [[UIToolbar alloc] initWithFrame:(UIInterfaceOrientationIsPortrait(interfaceOrientation)) ? CGRectMake(0, 0, 768, 44) : CGRectMake(0, 0, 703, 44)];
toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
[self.navigationController.navigationBar addSubview:toolbar];

の上viewWillDisappear:

[self setToolbarHidden:YES animated:animated];

そしてviewWillAppear:

[self setToolbarHidden:NO animated:animated];

これで、何でも追加できるツールバーができました。まあ、UIToolbarとにかくに追加できるものは何でも、それはほとんど何でもです。

于 2011-05-26T12:42:55.450 に答える