UITabBarControllerがあります。最初のタブ以外のタブを選択するときは、タブバーを非表示にし(hidesBottomBarWhenPushedで実現)、ナビゲーションバーに戻るボタン(プレーンではありませんが、デフォルトで矢印付き)を表示します(最初のタブに移動します)。どうすればこれを達成できますか?
1 に答える
以下であなたの質問に答えますが、これは比喩を混ぜ合わせている非常に非標準的なユーザーインターフェースであると言わざるを得ません。本当に別のViewControllerにプッシュしたい場合は、タブバーを使用しないでください。おそらく、セカンダリViewControllerに移動するための単純なボタンが必要です。Appleが、あなたが考えているようなタブバーを使用したアプリを拒否しても驚かないでしょう。
とにかく、あなたの質問に答えるために、あなたは二次ビューに「戻る」ボタンを追加しようとするのではなく、むしろナビゲーションコントローラを適切に実装したいだけです。次に、セカンダリビューにプッシュすると、自動的に戻るボタンが表示されます。また、タブバーを非表示にすることに関連する愚かさについても心配する必要はありません。別のビューにプッシュすると、タブバーも押し出されるからです。
したがって、この例を考えてみましょう。ここでは、ボタン「One」、「Two」、および「Three」を備えたタブバーがあります。ただし、適切なタブバーコントローラー構成ではなく、次のようなものになります。「One」はナビゲーションコントローラー上にあり、シンプルなタブバーユーザーインターフェイスコントロールがあり、2番目のまたは3番目のタブでは、それぞれのビューにプッシュします。したがって、論理的には、次のようになります(ストーリーボードを使用していない場合でも、これは潜在的な構成の視覚化に役立つ可能性があります)。
IBOutlet
したがって、メインビューコントローラ(「One」)で、 :付きのタブバーを追加します。
@property (weak, nonatomic) IBOutlet UITabBar *tabBar;
次に、そのタブバーを次のように構成しますviewDidLoad
。
- (void)viewDidLoad
{
[super viewDidLoad];
self.tabBar.delegate = self;
self.tabBar.selectedItem = [self.tabBar.items objectAtIndex:0];
}
明らかに、View Controller自体はである必要があり、プッシュセグエを実行するか、またはを使用するaがUITabBarDelegate
必要です。そして、明らかに、タブバーボタンに付けた実際のラベルへの参照を変更したいと思うでしょうが、うまくいけば、これはあなたにアイデアを与えるでしょう:didSelectItem
navigationController
pushViewController
@"Two"
@"Three"
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
if ([item.title isEqualToString:@"Two"])
{
// put code for pushing to second view controller here
}
if ([item.title isEqualToString:@"Three"])
{
// put code for pushing to third view controller here
}
}
また、メインビューコントローラで、ポップバック後に再表示されたときに、選択したアイテムを最初のアイテムに戻すようにします。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
self.tabBar.selectedItem = [self.tabBar.items objectAtIndex:0];
}
とにかく、このようにすると、タブバーが非表示になることはありません(これは、コントローラーではなく、最初のタブのユーザーインターフェイス要素にすぎないためです)。これはおそらく、目的のユーザーインターフェイスを実装するための最も簡単な方法です。