ios将数据从TabbarController传递到Storyboard中的ViewController

在storboard编辑器中,我有一个TabBarController和4个选项卡。 当我select第4个选项卡时,我想向其视图控制器发送一个string。 在我的TabbarController类(名为TabBarVC)中,我实现了以下方法:

- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController { NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController]; if(indexOfTab == 3) { SupplierListVC *slvc = (SupplierListVC *) viewController; slvc.locationType = @"favorite"; self.tabBarController.selectedViewController = slvc; } } 

这种方法被称为很好,但string没有得到通过。 当我debugging时,我注意到,上面的一段代码是在供应商ListListVC的viewDidLoad之后调用的。 我在这里做错了什么? 当我select选项卡时,如何传递string?

正如你所说,这个方法在viewDidLoad之后被调用。 方法名称本身应该告诉你: **DID**SelectViewController

过去式。 英语可能不是你的第一语言,但是对于英语动词时态的理解,在使用苹果的方法名称的时候真的很真实,真的很长。 他们没有误导。 他们告诉你什么时候/什么/为什么该方法,只是在方法名称。

现在,string应该适当地传递到视图控制器 – 你可能只是在错误的时间检查。

但是使用标签栏时,每次切换到标签时,它所包含的视图控制器都不会被加载。 这些标签预加载一次,如果标签栏控制器本身被解散(或者可能从标签栏控制器的视图控制器arrays中删除了视图控制器),将只会被卸载。

你可以使用tabBarController:shouldSelectViewController:

这个方法就像你正在使用的方法一样,给你一个标签栏控制器的参考,以及它试图切换的视图控制器。 然而它返回一个BOOL值。 如果你返回NO ,交换机不会发生。 你可以简单地总是返回YES如果你愿意的话,这里的要点是,这个方法在开始之前调用,因此在调用viewWillAppearviewDidAppear之前。

从tabbar控制器传递数据到viewcontroller时,我有同样的问题。

 NumberpadViewController *numpad= [[self viewControllers] objectAtIndex:1]; numpad.number=@"12345"; 

我在viewdidload方法中得到的数字为零。

 - (void)viewDidLoad { NSLog(@"number@",number);//nil value } 

所以我使用了viewdidappear方法来处理数字数据。

 -(void)viewDidAppear:(BOOL)animated{ NSLog(@"number@",number);//12345 }