0

uiview コントローラーから tabbarcontroller を追加しています。私のコードを確認してください:

UITabBarController *tabBarController = [[UITabBarController alloc] init];
            NSMutableArray *arrControllers = [[NSMutableArray alloc] init];
            for(int i = 0; i<arrTabs.count;i++){
                NSArray *arr = [arrTabs objectAtIndex:i];
                if([[arr objectAtIndex:0] isEqualToString:@"PICS"]){
                    picTabViewController *pics = [[picTabViewController alloc] initWithNibName:@"picTabViewController" bundle:nil];
                    UINavigationController *picsNVC = [[UINavigationController alloc] initWithRootViewController:pics];
                    picsNVC.tabBarItem.image = [UIImage imageNamed:@"tab-news.png"];
                    picsNVC.tabBarItem.title = [arr objectAtIndex:1];
                    [arrControllers addObject:picsNVC];
                }
                if([[arr objectAtIndex:0] isEqualToString:@"MAP"]){
                    mapTabViewController *maps = [[mapTabViewController alloc] initWithNibName:@"mapTabViewController" bundle:nil];
                    UINavigationController *mapsNVC = [[UINavigationController alloc] initWithRootViewController:maps];
                    mapsNVC.tabBarItem.image = [UIImage imageNamed:@"tab-news.png"];
                    mapsNVC.tabBarItem.title = [arr objectAtIndex:1];
                    [arrControllers addObject:mapsNVC];
                }
                if([[arr objectAtIndex:0] isEqualToString:@"HTML"]){
                    htmlTabViewController *html = [[htmlTabViewController alloc] initWithNibName:@"htmlTabViewController" bundle:nil];
                    UINavigationController *htmlNVC = [[UINavigationController alloc] initWithRootViewController:html];
                    htmlNVC.tabBarItem.image = [UIImage imageNamed:@"tab-news.png"];
                    htmlNVC.tabBarItem.title = [arr objectAtIndex:1];
                    [arrControllers addObject:htmlNVC];
                }
            }
            tabBarController.viewControllers = arrControllers;
            self.tabBarController.selectedIndex = 0;
            [self.view.window addSubview:tabBarController.view];

必要に応じて、タブ バー コントローラーが追加されます。しかし今、前のページに戻るボタンを追加したい、または追加されたビューコントローラーからタブバーとそのビューコントローラーを削除すると言うことができます。誰かが私にそれを行う方法を教えてもらえますか?
app デリゲートではなく、viewcontroller から tabbarcontroller を追加したことを覚えておいてください。

よろしく
パンカイ

4

2 に答える 2

0

1 つのタブバーと alloc-init を 1 回取得してから、別UIViewの s で表示と非表示を切り替えます。
したがって、常に削除して割り当てる必要はありません。

タブバーを表示

[self showTabBar:self.tabBarController];

タブバーを隠す

[self hideTabBar:self.tabBarController];

表示用のコード -> 'Y' を設定すると自動的に表示されます::

- (void) showTabBar:(UITabBarController *) tabbarcontroller
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.4];
    for(UIView *view in tabbarcontroller.view.subviews)
    {
        if([view isKindOfClass:[UITabBar class]])
        {
            if ([[UIScreen mainScreen] bounds].size.height == 568)
            {
                [view setFrame:CGRectMake(view.frame.origin.x, 519, view.frame.size.width, view.frame.size.height)];
            }
            else if ([[UIScreen mainScreen] bounds].size.height == 480)
            {
                [view setFrame:CGRectMake(view.frame.origin.x, 431, view.frame.size.width, view.frame.size.height)];
            }
        }
        else
        {
            if ([[UIScreen mainScreen] bounds].size.height == 568)
            {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 519)];
            }
            else if ([[UIScreen mainScreen] bounds].size.height == 480)
            {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 431)];
            }
        }
    }
    [UIView commitAnimations];
}

非表示のコード -> 'Y' を設定すると自動的に非表示になります::

- (void) hideTabBar:(UITabBarController *) tabbarcontroller
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.4];
    for(UIView *view in tabbarcontroller.view.subviews)
    {
        if([view isKindOfClass:[UITabBar class]])
        {
            if ([[UIScreen mainScreen] bounds].size.height == 568)
            {
                [view setFrame:CGRectMake(view.frame.origin.x, 568, view.frame.size.width, view.frame.size.height)];
            }
            else if ([[UIScreen mainScreen] bounds].size.height == 480)
            {
                [view setFrame:CGRectMake(view.frame.origin.x, 480, view.frame.size.width, view.frame.size.height)];
            }
        }
        else
        {
            if ([[UIScreen mainScreen] bounds].size.height == 568)
            {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 568)];
            }
            else if ([[UIScreen mainScreen] bounds].size.height == 480)
            {
                [view setFrame:CGRectMake(view.frame.origin.x, view.frame.origin.y, view.frame.size.width, 480)];
            }
        }
    }

    [UIView commitAnimations];
}

アプリケーション中に常に割り当てと解放をしたくない場合に役立つことを願っています。
ありがとう。

于 2013-03-07T11:02:03.067 に答える
0

AppDelegate.mスーパービューから tabbarcontroller を削除し、別のビューをparentviewControllerとして設定する場合は、このメソッドをファイルに入れてこのメソッドを呼び出すだけです

-(void)setMainView 
{

     yourViewController *masterViewController = [[[yourViewController alloc] initWithNibName:@"yourViewController" bundle:nil] autorelease];
     self.navigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
     self.navigationController.navigationBar.hidden=YES;
     self.window.rootViewController = self.navigationController;

    CATransition *animation = [CATransition animation];
    [animation setDelegate:self];   
    [animation setType:kCATransitionFade];
    [animation setDuration:0.5];
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:
                                  kCAMediaTimingFunctionEaseInEaseOut]];
    [[self.window layer] addAnimation:animation forKey:kAnimationKey];
}

上記のメソッドを AppDelegate クラス For Ex のオブジェクトで呼び出します。

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate setMainView];

これがお役に立てば幸いです..

于 2013-03-07T12:00:27.367 に答える