0

ナビゲーションバーベースのiPadアプリがあります。

ある時点で、別のViewControllerをViewsController階層にプッシュしたいと思います。次に、ユーザーがいくつかのボタンをタブで移動したときに、leftMenuコントローラーを表示したいと思います。そうするために、私は2つの見解を持っています:

すべてのコンテンツを含むコンテンツビュー

そして、leftMenuである非表示のビュー。これはコンテンツビューの下にあります。

したがって、ユーザーがボタンを押すと、Imが現在実行しているのは、コンテンツビューとナビゲーションバーを右に移動して、leftMenuを表示することです。

    self.navigationController.navigationBar.frame = CGRectMake(271.0, self.navigationController.navigationBar.frame.origin.y, self.navigationController.navigationBar.frame.size.width, self.self.navigationController.navigationBar.frame.size.height);

    
    self.contentView.frame = CGRectMake(271.0, self.contentView.frame.origin.y, self.contentView.frame.size.width, self.contentView.frame.size.height);

これは機能していますが、左側のメニューの最初の行は、ナビゲーションバーがあると思われる場所で「クリック可能」ではありません。ナビゲーションバーのように、タブイベントをキャプチャします。

するのは正しいですか?:

    self.navigationController.navigationBar.frame = CGRectMake(271.0, self.navigationController.navigationBar.frame.origin.y, self.navigationController.navigationBar.frame.size.width, self.self.navigationController.navigationBar.frame.size.height);

そうでない場合、私が望むことを達成するための適切な方法は何ですか?

問題が何であるかを説明するここと画像:

例

4

2 に答える 2

1

このようなことを行うには、ナビゲーション バーを移動するよりも、カスタム コンテナー コントローラーを使用するのが最善だと思います。IB では、これは非常に簡単に設定できます。UIViewController から始めて、コンテナー ビューを追加し、必要なサイズにします。次に、インスペクターで、x 値を幅から引いた値に設定します。これにより、画面の左側に表示されなくなります。次に、別のコンテナー ビューを追加し、サイズを全画面表示にします。次に、そのコンテナー ビューで取得したビュー コントローラーを削除し、コンテナー ビューから (既にセットアップされている UI の) 最初のナビゲーション コントローラーに右ドラッグして、埋め込みセグエに接続します。開始した UIViewController は、ストーリーボードの初期ビュー コントローラーにする必要があります。側面図で移動するには、カスタム コンテナー コントローラーで次のコードを使用します。

-(void)slideInLeft {
    if (isRevealed == NO) {
        [UIView animateWithDuration:.6 animations:^{
            leftView.center = CGPointMake(leftView.center.x + 100, leftView.center.y);
            mainView.center = CGPointMake(mainView.center.x + 100, mainView.center.y);
        } completion:^(BOOL finished) {
            isRevealed = YES; ;
        }];
    }else{
        [UIView animateWithDuration:.6 animations:^{
            leftView.center = CGPointMake(leftView.center.x - 100, leftView.center.y);
            mainView.center = CGPointMake(mainView.center.x - 100, mainView.center.y);
        } completion:^(BOOL finished) {
            isRevealed = NO;
        }];
    }

}

leftView と mainView は、2 つのコンテナー ビューへの IBOutlets です。メイン ビュー コントローラー (大きなコンテナー ビューに埋め込まれたナビゲーション コントローラーのルート ビュー コントローラー) のボタンからこのメソッドを呼び出します。

-(IBAction)callSlideIn:(id)sender {
    [(ViewController *)self.navigationController.parentViewController slideInLeft];
}
于 2013-01-10T18:03:55.430 に答える
0

これを達成するための「速い」方法を見つけました(そして少しハッキーなimo)

ビュー階層のトップ ビューに leftMenu ビューを追加しました。

UIWindow* window = [UIApplication sharedApplication].keyWindow;
if (!window)
    window = [[UIApplication sharedApplication].windows objectAtIndex:0];

[[[window subviews] objectAtIndex:0] addSubview:self.leftMenu.view];

ナビゲーション バーよりも奥行が少なくなり、もちろんクリック可能になりました。

于 2013-01-11T08:22:02.380 に答える