代码之家  ›  专栏  ›  技术社区  ›  Raj Pawan Gumdal

自定义UITabBarController

  •  1
  • Raj Pawan Gumdal  · 技术社区  · 15 年前

    我的方法和其中的障碍是:

    A) 我想到的第一个解决方案是创建我自己的viewController,它的作用就像是一个底部有按钮的UITabBarController,并将这个viewController添加到窗口中。当用户点击底部的按钮时,在可视区域中交换视图与用户现在点击的按钮对应的新视图控制器。

    此策略的问题是:由于我交换了视图,相应的ViewController将不会收到以下消息:

    • viewWillAppear
    • viewWillDisappear
    • viewDidAppear
    • viewDidDisappear

    以及所有的轮换事件

    Custom UITabBarController Problems with View Controllers and Views

    但是我的标签条的高度与默认值不同。

    由于上述原因,我不能使用这些方法。

    话虽如此,我没有特别要求更多的标签。我将只有5个选项卡,将显示在选项卡栏,因此,重新排序的选项卡栏项目是超出范围。

    2 回复  |  直到 9 年前
        1
  •  2
  •   Ole Begemann    15 年前

    我从来没有尝试过这样的事情,但我认为,你应该把这些消息手动发送给你的子视图控制器。

    发送-viewWill/Did(Dis)在适当的时候出现在正确的控制器上应该没有问题。这是什么 UITabBarController 也一样。

    • shouldAutorotateToInterfaceOrientation: ,将此消息转发给子控制器,并根据其返回值设置返回值( UITABBARC控制器 只有回报 YES 如果它的所有子控制器都返回

    • 福沃德 willRotateToInterfaceOrientation:duration: , didRotateFromInterfaceOrientation: willAnimateRotationToInterfaceOrientation:duration:

    • 如果您已正确设置子控制器视图的自动调整大小掩码,则当系统旋转自定义选项卡栏控制器的视图时,可以正确地旋转和调整它们的大小。(至少我觉得应该是这样的。)

        2
  •  0
  •   Geek    12 年前

    -(void)applicationDidFinishLaunching:(UIApplication *)application {
    
        // Add the tab bar controller's current view as a subview of the window
        tabBarController.delegate = self;
        tabBarController = [[UITabBarController alloc] init];
    
        mainDashBoard = [[DashBoard alloc] initWithNibName:@"DashBoard" bundle:nil];
        mainSearchView = [[SearchView alloc] initWithNibName:@"SearchView" bundle:nil];
        mainMoreView = [[MoreView alloc] initWithNibName:@"MoreView" bundle:nil];
    
        UINavigationController *nvCtr0 = [[[UINavigationController alloc] init] autorelease];
        UINavigationController *nvCtr1 = [[[UINavigationController alloc] initWithRootViewController:mainDashBoard] autorelease];
        UINavigationController *nvCtr2 = [[[UINavigationController alloc] initWithRootViewController:mainSearchView] autorelease];
        UINavigationController *nvCtr3 = [[[UINavigationController alloc] initWithRootViewController:mainMoreView] autorelease];
        UINavigationController *nvCtr4 = [[[UINavigationController alloc] init] autorelease];//[[[UINavigationController alloc] initWithRootViewController:nil] autorelease];
    
        tabBarController.viewControllers = [NSArray arrayWithObjects:nvCtr0,nvCtr1,nvCtr2,nvCtr3,nvCtr4,nil];
    
        nvCtr0.tabBarItem.enabled = NO;
        nvCtr4.tabBarItem.enabled = NO;
    
        [window tabBarController.view];
    }