【问题标题】:Creating a TabBarControllerDelegate in a Storyboard在 Storyboard 中创建 TabBarController 委托
【发布时间】:2012-02-03 00:58:01
【问题描述】:

我在 Storyboard 驱动的 iOS5 应用程序中创建 UITabBarControllerDelegate 时遇到了困难。情况如下:

  1. 我有一个初始屏幕,最终将处理登录,但目前只有一个按钮,可将用户发送到...
  2. ...带有五个选项卡的选项卡栏控制器。这些标签中的每一个都转到...
  3. ...一个导航控制器,在根目录下有许多子视图控制器。

(如果有帮助,相关故事板部分的屏幕截图是here。)

当用户切换选项卡时,我总是希望用户被引导到该特定导航控制器的根视图控制器,而不是最近访问的视图控制器(这是默认行为)。

我知道要这样做,我需要在按下 Tab 时调用 popToRootViewControllerAnimated,如 herehere 所讨论的那样,但我不知道如何在情节提要中执行此操作。如何在不废弃情节提要并重新开始的情况下做到这一点?

谢谢!

【问题讨论】:

    标签: iphone xcode4 delegates ios5 uitabbarcontroller


    【解决方案1】:

    您的问题有不止一种解决方案(这是设计模式决策的问题)。其中一些可能是:

    1. 子类 UITabBarController 并将其设置为故事板中标签栏的自定义类(还将委托连接到您的对象以便进行处理)并覆盖 -tabBarController:didSelectViewController:委托方法

    2. 通过从您希望实现此行为的每个视图的 viewWillDisappear 事件调用 -popToRootViewControllerAnimated 弹出到根目录

    【讨论】:

      【解决方案2】:

      您可以创建自己的 TabBarController,实现一个实例化视图控制器的方法

      -(UIViewController*) viewControllerWithTabTitle:(NSString*) title 
                                          viewController(NSString *)viewController {
      
      UIViewController* returnViewController = [self.storyboard 
                                   instantiateViewControllerWithIdentifier:viewController];
      
        return returnViewController;
      }
      

      然后在 viewDidLoad 方法中,您使用视图控制器创建数组,在您的情况下,这将是您在 InterfaceBuilder 上设置的 NavigationController 的标识符。

      - (void)viewDidLoad {
      
        self.viewControllers=
      [NSArray arrayWithObjects:
       [self viewControllerWithTabTitle:@"Option 1" viewController:@"viewController1"],
       [self viewControllerWithTabTitle:@"Option 2" viewController:@"viewController2"],
       [self viewControllerWithTabTitle:@"Option 3" viewController:@"viewController3"],
       [self viewControllerWithTabTitle:@"Option 4" viewController:@"viewController4"],
       [self viewControllerWithTabTitle:@"Option 5" viewController:@"viewController5"], nil];
      
       }
      

      【讨论】:

      • 这对我来说非常有效。我能够将选项卡从多个 UITabBarController 重新路由到同一个选项卡/视图控制器,因此我不必复制它们,因为情节提要本身需要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      相关资源
      最近更新 更多