「パス」アプリケーションと同様の「領域選択」を作成しようとしています。 アイデアは、コントローラをスライドさせてデータ「セレクタ」を表示させるためのナビゲーションバーにボタンを配置することです。UINavigationBarを画面外に移動すると、下の領域には触れられません。
与えられる以下のUI構造:私はそれ以降の情報の更なるレベルを追加する必要があるよう
メインコントローラUINavigationControllerあります。
基本的には次のように動作します。
アプリケーションがフォアグラウンドでデータテーブルから始まります。ユーザーはデータをクリックするか、左上のナビゲーション項目でクリックできます。
一度ナビゲーション項目をクリックし、それがセレクター・テーブル・ビューを明らかにすることはさておき、ナビゲーションバー、ツールバーとのtableViewを移動します。
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
になっていることが原因である可能性もあります。結局のところ、それは間違ったアプローチだろうか?
ありがとうございます。
私は答えがわかりませんが、[このGitHubリポジトリ](https://github.com/newmarcel/MKDSlideViewController)は、他の人が同じナビゲーションアイデアを実装したものです。 – jonkroll
良いリンク、ありがとうございます!実際には、これは重要な問題を強調しています。左、中央、(必要であれば)右のビューコントローラは別々にする必要があります。そうすれば、各コントローラには独自のビューがあり、遭遇したような問題は起こり得ません。啓発に感謝します。 :) –