2012-01-10 7 views
1

「パス」アプリケーションと同様の「領域選択」を作成しようとしています。 アイデアは、コントローラをスライドさせてデータ「セレクタ」を表示させるためのナビゲーションバーにボタンを配置することです。UINavigationBarを画面外に移動すると、下の領域には触れられません。

与えられる以下のUI構造:私はそれ以降の情報の更なるレベルを追加する必要があるよう

UI View structure

メインコントローラUINavigationControllerあります。

基本的には次のように動作します。

アプリケーションがフォアグラウンドでデータテーブルから始まります。ユーザーはデータをクリックするか、左上のナビゲーション項目でクリックできます。

Data table visible

一度ナビゲーション項目をクリックし、それがセレクター・テーブル・ビューを明らかにすることはさておき、ナビゲーションバー、ツールバーとのtableViewを移動します。

Selector table visible

IS離れて、すべてを動かすコード:

- (IBAction)toggleAreaSelector:(id) sender { 
    float offsetX = self.tableView.frame.origin.x == 0 ? 300 : -300; 

    [UIView animateWithDuration:0.3f delay:0 options:UIViewAnimationCurveEaseIn animations:^{ 
     self.navigationController.navigationBar.frame = CGRectOffset(self.navigationController.navigationBar.frame, offsetX, 0); 
     self.toolBar.frame = CGRectOffset(self.toolBar.frame, offsetX, 0); 
     self.tableView.frame = CGRectOffset(self.tableView.frame, offsetX, 0); 
    } completion:^(BOOL finished) { 
     self.navigationController.navigationBar.userInteractionEnabled = offsetX == 300 ? NO : YES; 
     self.tableView.userInteractionEnabled = offsetX == 300 ? NO : YES; 
    }]; 
} 

問題がある:セレクタ「エリア0」の最初の項目をクリックできません。 UINavigationBarがまだそのエリアに「タッチ」ロックを保持していて、すべてのタッチを受け取っているからだと思います。

インターフェイスビルダーに表示されているときに、セレクタビューがの後ろにあるUINavigationBarになっていることが原因である可能性もあります。結局のところ、それは間違ったアプローチだろうか?

ありがとうございます。

+1

私は答えがわかりませんが、[このGitHubリポジトリ](https://github.com/newmarcel/MKDSlideViewController)は、他の人が同じナビゲーションアイデアを実装したものです。 – jonkroll

+0

良いリンク、ありがとうございます!実際には、これは重要な問題を強調しています。左、中央、(必要であれば)右のビューコントローラは別々にする必要があります。そうすれば、各コントローラには独自のビューがあり、遭遇したような問題は起こり得ません。啓発に感謝します。 :) –

答えて

0

解決策が見つかりました。

@jonkroll他の人が以前にこのUIパターンを実装しようと試みたので、このリンクが最も役立ちました。そのビューのために同じ:

重要な問題は、

[self addChildViewController:self.leftViewController]; 
[self.view addSubview:self.leftViewController.view]; 

各ビューコントローラは、独立して、最も重要な管理されているその方法を使用してについてです。

これが完了すると、管理コントローラはこれらのビューのほとんどすべてを実行できます。

0

なぜ画面外に移動しますか?なぜあなただ​​けの新しいテーブルビューで新しいView Controllerをプッシュするのはなぜですか?

Areas *secondViewController = [[Areas alloc] initWithNibName:@"Areas" bundle:nil]; 
[self.navigationController pushViewController:secondViewController animated:YES]; 
[secondViewController release]; 
+0

あなたは 'jonkroll'が私が覚えているアプリケーション構造のデモのために送られたリンクを確認することができます:https://github.com/newmarcel/MKDSlideViewController –

関連する問題