繁体   English   中英

自定义标签栏不显示导航栏

[英]Custom tab bar doesn't show navigation bar


我目前正在使用多层板项目,正在UIViewController中创建自定义UIView (我将其命名为“ Tab Bar VC”),并使其看起来像带有此链接中的教程的选项卡栏:
https://github.com/codepath/ios_guides/wiki/Creating-a-Custom-Tab-Bar
一切正常显示,但是问题是当我按下选项卡栏项时,导航栏不显示,没有它,我将无法推送到另一个视图控制器。 我试图将“ Tab Bar VC”嵌入到像这样的导航控制器中,但是它不起作用:
请注意,在我的情况下,我不想使用UITabBarViewControllerStoryboard Reference 请帮我。
预先感谢。 在此处输入图片说明 这是我的Tab Bar VC的代码:

#import "SHTabViewController.h"
#import "SHHomeViewController.h"
#import "SHTicketViewController.h"
#import "SHNotificationViewController.h"
#import "SHChatViewController.h"
#import "SHCallViewController.h"

@interface SHTabViewController () {
    NSMutableArray *viewcontrollers;
    NSInteger selectedIndex;
}
@property (weak, nonatomic) IBOutlet UIView *contentView;
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *tabButtons;
@property (strong, nonatomic) SHHomeViewController *homeVC;
@property (strong, nonatomic) SHCallViewController *callVC;
@property (strong, nonatomic) SHChatViewController *chatVC;
@property (strong, nonatomic) SHTicketViewController *ticketVC;
@property (strong, nonatomic) SHNotificationViewController *notifVC;

@end

@implementation SHTabViewController

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    selectedIndex = 0;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    selectedIndex = 0;
    UIStoryboard *homeStoryboard = [UIStoryboard storyboardWithName:@"Home" bundle:[NSBundle mainBundle]];
    UIStoryboard *callStoryboard = [UIStoryboard storyboardWithName:@"CallPM" bundle:[NSBundle mainBundle]];
    UIStoryboard *chatStoryboard = [UIStoryboard storyboardWithName:@"Chat" bundle:[NSBundle mainBundle]];
    UIStoryboard *ticketStoryboard = [UIStoryboard storyboardWithName:@"Ticket" bundle:[NSBundle mainBundle]];
    UIStoryboard *notifStoryboard = [UIStoryboard storyboardWithName:@"Notification" bundle:[NSBundle mainBundle]];

    self.homeVC = [homeStoryboard instantiateViewControllerWithIdentifier:@"homeVC"];
    self.callVC = [callStoryboard instantiateViewControllerWithIdentifier:@"callVC"];
    self.chatVC = [chatStoryboard instantiateViewControllerWithIdentifier:@"chatVC"];
    self.ticketVC = [ticketStoryboard instantiateViewControllerWithIdentifier:@"ticketVC"];
    self.notifVC = [notifStoryboard instantiateViewControllerWithIdentifier:@"notificationVC"];
    viewcontrollers = [NSMutableArray new];
    [viewcontrollers addObject:self.homeVC];
    [viewcontrollers addObject:self.callVC];
    [viewcontrollers addObject:self.chatVC];
    [viewcontrollers addObject:self.ticketVC];
    [viewcontrollers addObject:self.notifVC];

    [self.tabButtons[selectedIndex] setSelected:YES];
    [self didPressTab:self.tabButtons[selectedIndex]];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)didPressTab:(UIButton *)sender {
    selectedIndex = 0;
    sender.selected = YES;
    NSInteger previousIndex = selectedIndex;
    selectedIndex = sender.tag;
    [self.tabButtons[previousIndex] setSelected:NO];
    UIViewController *previousVC = viewcontrollers[previousIndex];
    [previousVC willMoveToParentViewController:nil];
    [previousVC.view removeFromSuperview];
    [previousVC removeFromParentViewController];

    UIViewController *vc = viewcontrollers[selectedIndex];
    [self addChildViewController:vc];
    vc.view.frame = self.contentView.bounds;
    [self.contentView addSubview:vc.view];
    [vc didMoveToParentViewController:self];
}

不要在UINavigationViewController中嵌入“标签栏VC”。 将“ UINavigationViewController”与您在“标签栏VC”中添加的每个单独的UIViewController嵌入。

您应该将所有单个视图控制器嵌入导航控制器。

TabBarController> NavigationController> Viewcontroller

    For this you need to add a NavigationController for every Controllers like below


   -(void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        selectedIndex = 0;
        UIStoryboard *homeStoryboard = [UIStoryboard storyboardWithName:@"Home" bundle:[NSBundle mainBundle]];
        UIStoryboard *callStoryboard = [UIStoryboard storyboardWithName:@"CallPM" bundle:[NSBundle mainBundle]];
        UIStoryboard *chatStoryboard = [UIStoryboard storyboardWithName:@"Chat" bundle:[NSBundle mainBundle]];
        UIStoryboard *ticketStoryboard = [UIStoryboard storyboardWithName:@"Ticket" bundle:[NSBundle mainBundle]];
        UIStoryboard *notifStoryboard = [UIStoryboard storyboardWithName:@"Notification" bundle:[NSBundle mainBundle]];

        self.homeVC = [homeStoryboard instantiateViewControllerWithIdentifier:@"homeVC"];
        self.callVC = [callStoryboard instantiateViewControllerWithIdentifier:@"callVC"];
        self.chatVC = [chatStoryboard instantiateViewControllerWithIdentifier:@"chatVC"];
        self.ticketVC = [ticketStoryboard instantiateViewControllerWithIdentifier:@"ticketVC"];
        self.notifVC = [notifStoryboard instantiateViewControllerWithIdentifier:@"notificationVC"];

     UINavigationController *homeNavController = [[UINavigationController alloc] initWithRootViewController: self.homeVC];
     UINavigationController *callVCNavController = [[UINavigationController alloc] initWithRootViewController: self.callVC];
     UINavigationController *chatVCNavController = [[UINavigationController alloc] initWithRootViewController: self.chatVC];
     UINavigationController *ticketVCNavController = [[UINavigationController alloc] initWithRootViewController: self.ticketVC];
     UINavigationController *notifVCNavController = [[UINavigationController alloc] initWithRootViewController: self.notifVC];


        viewcontrollers = [NSMutableArray new];
        [viewcontrollers addObject: homeNavController];
        [viewcontrollers addObject: callVCNavController];
        [viewcontrollers addObject:ticketVCNavController];
        [viewcontrollers addObject:chatVCNavController];
        [viewcontrollers addObject: notifVCNavController];

        [self.tabButtons[selectedIndex] setSelected:YES];
        [self didPressTab:self.tabButtons[selectedIndex]];

您使用了错误的方法。 您是将标签栏控制器嵌入到一个在逻辑上没有任何意义的导航控制器中,而是应该将各种导航控制器嵌入一个标签栏控制器中。 尝试做这样的事情: 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM