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

时间:2014-05-27 22:59:15

标签: ios storyboard uitabbarcontroller

我有一个TabBarController,在storboard编辑器中设置了4个标签。当我选择第4个选项卡时,我想将一个字符串发送到它的视图控制器。在我的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;
    }
}

这个方法被调用得很好但字符串没有被传递。当我调试时,我注意到上面的代码是在SupplierListVC的viewDidLoad之后调用的。我在这做错了什么?当我选择标签时,如何传递字符串?

2 个答案:

答案 0 :(得分:3)

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

过去式。英语可能不是你的第一语言,但是在使用Apple的方法名称时,对英语动词时态的良好理解是非常,真实,真实,非常长的方式。他们并没有误导。它们只是在方法名称中告诉您该方法的确切时间/原因/原因。

现在,字符串应该被适当地传递给视图控制器 - 你可能只是在错误的时间检查它。

但是使用标签栏时,每次切换到标签时都不会加载它包含的视图控制器。标签预加载一次,如果标签栏控制器本身被关闭(或者可能从标签栏控制器的视图控制器阵列中删除视图控制器),则只会卸载标签。

您可以使用tabBarController:shouldSelectViewController:

此方法与您正在使用的方法类似,为您提供对标签栏控制器及其尝试切换的视图控制器的引用。但它返回BOOL值。如果您返回NO,则切换不会发生。如果需要,您可以随时返回YES,但这里的要点是在切换开始之前调用此方法,因此肯定在viewWillAppearviewDidAppear被调用之前。

答案 1 :(得分:0)

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

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

我在viewdidload方法中将数字设为nil。

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

所以我使用了viewdidappear方法对数字数据进行处理。

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