ビューコントローラから必要なときにタブバーを表示/非表示する

私はiOSプログラミングの新人です。私は本当にあなたの助けが必要です。

私はマップ(Google API)に私を連れて行くログイン画面があります。作成された注釈をクリックすると、2つのビューを持つタブバーをロードしたいと思う。

私は検索し、私は、タブレットを追加する必要が開始時にappdelegateと表示/タブバーを必要に応じて非表示にする必要があることがわかった。

だから私は2つの機能を表示し、タブバーを非表示にした

-(void)Load_tabBar{
[self.navigationController.view removeFromSuperview];
[self.window addSubview:tabBarController.view];
[self.window makeKeyWindow];}

-(void)remove_tabBar{
self.tabBarController.selectedIndex=0;
[self.tabBarController.view removeFromSuperview];
[self.window addSubview:navigationController.view];
[self.window makeKeyWindow];}

それは私がLoad_tabBarメソッドを呼び出すときに動作し、それをクリックするとremove_tabBarメソッドが呼び出されます。私は再びLoad_tabBarメソッドを呼び出して、それがクラッシュするとエラーが発生する

- [UILayoutContainerViewウィンドウ]:解放されたインスタンス0x563b0b0にメッセージが送信されました

編集:PS:View Controllerにタブバービューを追加して、そのビューをプッシュできますか?

thnx

5

3 答え

use this self.hidesBottomBarWhenPushed = YES;

9
追加された
そのプレゼンテーションビューコントローラでビューコントローラをプッシュしているときは、viewWillAppearメソッドでこれを追加する必要があります。コードを使用する必要はありません
追加された 著者 Tendulkar,
まだ同じbtを追加:(
追加された 著者 Anshuk Garg,
ビューコントローラにタブバービューを追加して、そのビューをプッシュできますか?
追加された 著者 Anshuk Garg,
前のView ControllerからprepareForSegueメソッドでこれを使用することをお勧めします。
追加された 著者 Keith OYS,

私はこの2つの方法があなたを助けることを願っています

- (void) hideTabBar:(UITabBarController *) tabbarcontroller {

int height = 480;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];

for(UIView *view in tabbarcontroller.view.subviews) {
    if([view isKindOfClass:[UITabBar class]]) {
        [view setFrame:CGRectMake(view.frame.origin.x, height, view.frame.size.width, view.frame.size.height)];
    } 
    else {
        [view setFrame:CGRectMake(view.frame.origin.x,view.frame.origin.y, 320, 436)];
    }
}
[UIView commitAnimations];

}

- (void) showTabBar:(UITabBarController *) tabbarcontroller {

int height = 480;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3]; 

for(UIView *view in tabbarcontroller.view.subviews) {

    if([view isKindOfClass:[UITabBar class]]) {
        [view setFrame:CGRectMake(view.frame.origin.x, height, view.frame.size.width, view.frame.size.height)];            
    } 
    else {
        [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, height)];
    }
}    

[UIView commitAnimations];

}

AppDelegateクラスにこの2つのメソッドを配置し、あなたの要件に応じて必要な場所に呼び出します。

1
追加された
私は、サブビューのフレームサイズを変更する必要はありません..ポップ時に、それは別のビューに完全にポップする..サブビューも行っている
追加された 著者 Anshuk Garg,
ちょうど必要なサイズを設定する必要があります!
追加された 著者 Nilesh Kikani,
うまく機能しているように見えますが、iPhoneとiPadの両方を処理するための調整を追加しました。ウィンドウの幅と高さを取得するようにfloat height = self.window.frame.size.height; float width = self.window.frame.size.width;
追加された 著者 Sheepdogsheep,

この方法は間違いなく機能します。あなたはこれをプッシュする前に、次のようにメソッドに入れるだけです:

-actionThatPushTheViewController { 

    //create the view controller here, do some init. 

    //then:
    theViewControllerToBePushed.hidesBottomBarWhenPushed = YES;

    //push it here like this: 
    [self.navigationController pushViewController:theViewControllerToBePushed animated:YES];
1
追加された