iPhoneで物理的なメニューボタン(Androidのような)メニューを作成するにはどうすればよいですか?
-
25-10-2019 - |
質問
iPhoneでナビゲーションベースのアプリケーションを開発しています。
Androidフォンのようなメニューのような物理的なメニューボタンを作成したいと考えています。
このメニューには、階層内のどのビューからでもアクセスできます。
どうすればこれを達成できるかわかる人はいませんか。
UINavigationBarにドロワーのようなメニューを追加できますか?
tabbarcontroller は最後のオプションであるため、推奨しないでください。
解決
あなたがすべきことは、のサブクラスを作成することです UIViewController
, 、例: MasterViewController
. 。すべてのView Controllersサブクラスを持っています 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];
他のヒント
あなたが望むのは、ユーザーのタップを処理するためにUinavigationItemのタイトルビューを任意のuiviewに設定するだけだと思います。
これはテキストラベルである必要はありません:)
もしそうなら、私はあなたが服用することを提案する sharedInstance
Flagsがビューコントローラースタックの階層を追跡します。ユーザーがナビゲートするたびに、更新するだけです sharedInstance
カスタムメニューの準備を行い、それを入力します。良い実践は、すべてのナビゲーション操作で新しくするのではなく、UIコンポーネントを再利用することです。
あなたは「」を作成できますDrawerView
「クラスを使用して使用したい場所にインポートします。その後、使用できます presentModalViewController: myDrawer
必要なときに表示させるために。それが理にかなっていることを願っています。
その非常にシンプルです。
1つのXibで、uは多くのビューを適切に追加できます。次に、データビューとダウンサイドボタンビューのような2つのメインビューを追加します。そして、あなたがそのデータビューに追加できる他のすべての見解のhirarchy。
シングルトンを作成する必要があると思います UIViewController
また UIView
このため。の利点 UIViewController
で提示できるということです presentModalViewController:animated:
方法、そして必要に応じて、ナビゲーションスタックに押し込むことができます。また、あなたが持っているという利点もあります UIView
同時にインスタンス。
Singletonパターンを使用して、どこでもクラスに到達できます。
Objective-CのSingletonに関する公式ドキュメントからこのリンクを確認してください。 Singletonインスタンスの作成
または、Matt Gallagherのマクロを使用することもできます(これは非常に快適であるため): シングルトンマクロ
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];
このアプローチ (子ビュー コントローラーを使用) を使用すると、ビューとナビゲーション コントローラーは、必要に応じて必要なメモリ警告、ビューの読み込み、および回転処理メソッドの呼び出しを取得します。