在故事板中创建TabBarControllerDelegate

时间:2012-01-05 06:24:24

标签: iphone xcode4 delegates ios5 uitabbarcontroller

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

  1. 我有一个初始屏幕,最终会处理登录,但目前只有一个按钮可以将用户发送给...
  2. ...带有五个标签的标签栏控制器。每个标签都转到......
  3. ...在根目录下有许多子视图控制器的导航控制器。
  4. (如果有帮助,相关故事板部分的屏幕截图为here。)

    当用户切换标签时,我总是希望将用户定向到该特定导航控制器的根视图控制器,而不是最近访问过的视图控制器(这是默认行为)。

    我明白要这样做,我需要在按照herehere讨论按Tab键时调用popToRootViewControllerAnimated,但我无法弄清楚如何在故事板中执行此操作。如何在不废弃故事板并重新开始的情况下做到这一点?

    谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

您可以创建自己的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];

 }