iPhoneでナビゲーションベースのアプリケーションを開発しています。
Androidフォンのようなメニューのような物理メニューボタンを作成したい。
このメニューには、階層内のどのビューからでもアクセスできます。
どうすればこれを達成できるか考えている人はいますか。
メニューのような引き出しを UINavigationBar に追加できますか?
tabbarcontroller は最後のオプションであるため、提案しないでください。
iPhoneでナビゲーションベースのアプリケーションを開発しています。
Androidフォンのようなメニューのような物理メニューボタンを作成したい。
このメニューには、階層内のどのビューからでもアクセスできます。
どうすればこれを達成できるか考えている人はいますか。
メニューのような引き出しを UINavigationBar に追加できますか?
tabbarcontroller は最後のオプションであるため、提案しないでください。
その場合は、sharedInstance
ViewControllerスタックの階層を追跡するフラグを使用することをお勧めします。ユーザーがナビゲートするたびに、を更新sharedInstance
し、カスタムメニューの準備を行ってデータを入力します。すべてのナビゲーション操作でUIコンポーネントを新しくするのではなく、UIコンポーネントを再利用することをお勧めします。
ユーザーのタップを処理するために、 UINavigationItem の titleView を任意の UIView に設定するだけだと思います。
これはテキスト ラベルである必要はありません :)
あなたがすべきことはUIViewController
、例えばのサブクラスを作成することですMasterViewController
。すべてのビュー コントローラーをサブクラス化しMasterViewController
ます。では、MasterViewController
ドロワー ビューを作成して表示するコードを記述できます。その後、すべてのビュー コントローラーがそのコードを継承し、いつでもそれを呼び出すことができます。
ビューをスライドするには:
drawerView.frame = CGRectMake(0, -1*drawerView.frame.size.height, self.view.frame.size.width, whateverHeight);
[UIView beginAnimations:nil context:NULL];
drawerView.frame = CGRectMake(0, 0, self.view.frame.size.width, whateverHeight);
[UIView commitAnimations];
iOS 5ベータ版を入手できる場合は、それを強くお勧めします。新しいベータ開発リリースには、UIViewController
Appleによってコンテナビューコントローラとして吹き替えられた拡張機能があります。セットアップはとても簡単で、アプリで使用しています。
コンテナビューコントローラは、子ビューだけでなく、子ビューコントローラを追加できるという点で同じようUINavigationControllers
に機能します。私が言ったように、それらはセットアップが簡単です。方法を説明します:UITabBarControllers
という名前の新しいクラスを作成しますContainerController
。と呼ばれる初期化メソッドを追加します- (id)initWithNavigationController:(UINavigationController *)controller
。実装は次のようになります。
if ((self = [super init])) {
[self addChildViewController:controller];
controller.view.frame = CGRectMake(0, 0, 320, 420); // Leave room for the menu at bottom of the screen
[self.view addSubview:controller.view];
}
ナビゲーションコントローラーを追加する理由は、このコンテナーコントローラーが遷移を実行しないようにするためです。これはより複雑です。
のメソッドで、メニューを作成しますContainerController
。viewDidLoad
[super viewDidLoad];
UIView *menuWrapperView = [[[UIView alloc] init] autorelease];
menuWrapperView.frame = CGRectMake(0, 420, 320, 40); // Place a wrapper for the menu buttons directly below the navigation controller
UIButton *button1 = ...;
UIButton *button2 = ...;
[menuWrapperView addSubview:button1];
[menuWrapperView addSubview:button2];
[self.view addSubview:menuWrapperView];
このアプローチ(子ビューコントローラーを使用)を使用すると、ビューとナビゲーションコントローラーは、必要なメモリ警告、ビューの読み込み、および必要に応じて回転処理メソッドの呼び出しを受け取ります。
その非常に単純な..
1 つの XIB で、多くのビューを正しく追加できます。ここで、たとえばデータ ビューとダウン サイド ボタン ビューのような 2 つのメイン ビューを追加します (ナビゲートするボタンが 4 つある場合)。そして、そのデータビューに追加できる他のすべてのビューの階層。
" " クラスを作成し、DrawerView
それを使用する場所にインポートできます。その後presentModalViewController: myDrawer
、必要なときにそれを表示するために使用できます。それが理にかなっていることを願っています。
UIViewController
このためにシングルトンを作成する必要があると思いますUIView
。の利点はUIViewController
、メソッドで表示できることと、presentModalViewController:animated:
必要に応じてナビゲーション スタックにプッシュできることです。UIView
同時にインスタンスがあるという利点もあります。
シングルトン パターンを使用すると、どこからでもクラスにアクセスできます。
Objective-C のシングルトンに関する公式ドキュメントからこのリンクを確認してください:シングルトン インスタンスの作成
または、Matt Gallagher のマクロを使用できます (これは非常に使いやすいため):シングルトン マクロ