用segue在视图控制器和标签栏之间传递Storyboard数据

4

在选项卡控制器之前,我有一个页面(称为X),使用模型segue打开选项卡控制器。此外,选项卡控制器的第一个屏幕与X相同。

我想将数据从X传递到选项卡控制器的第一页。

简而言之,我想通过故事板segue将数据从视图控制器传递到选项卡控制器页面。有没有这样的方法?

下面是解决方案;

    locationsHome* vc = [[locationsHome alloc] init];
    UITabBarController* tbc = [segue destinationViewController];
    vc = (locationsHome *)[[tbc customizableViewControllers] objectAtIndex:0];

看起来你已经回答了自己的问题。我原以为你在问如何将数据传递给segue.destinationViewController这个更基础的问题,但很高兴看到你解决了自己的问题。 - Rob
您可以将您的解决方案发布为答案并接受它。 - Tiago Almeida
抱歉,Tiago,我在这个网站上是新手。我会按照你建议的去做,谢谢。 - SiberKorsan
4个回答

9
这是我解决问题的方法。你可以使用这种方法将数据从 ViewController 传递到 TabBarController。
在prepareForSegue方法中使用以下代码。
locationsHome* vc = [[locationsHome alloc] init];
UITabBarController* tbc = [segue destinationViewController];
vc = (locationsHome *)[[tbc customizableViewControllers] objectAtIndex:0];

就像这样:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{

    NSString * segueIdentifier = [segue identifier];
    if([segueIdentifier isEqualToString:@"tabbarGo"]){

        locationsHome* vc = [[locationsHome alloc] init];
        UITabBarController* tbc = [segue destinationViewController];
        vc = (locationsHome *)[[tbc customizableViewControllers] objectAtIndex:0];

        etc...

    }
}

我已经添加了prepareForSegue方法,但导航无法正常工作。有任何想法为什么? - LZH
你应该使用UITabBarController作为目标视图控制器,然后给出索引号。 - SiberKorsan

2
//if sent to First Tab of Tab Bar Controller
UITabBarController *tabBarController = segue.destinationViewController;
UINavigationController *navigationController = (UINavigationController *)[[tabBarController viewControllers] objectAtIndex:0];
createTeamViewController *controller = (createTeamViewController *)[[navigationController viewControllers] objectAtIndex:0];

controller.userProfile = self.userProfile;

0

对于Swift 2.2,我不得不以这种方式修改接受的答案

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    if (segue.identifier == "userAccountSegue")
    {
        var firstTabViewController: UserAccountViewController = UserAccountViewController()
        let tabViewController: UITabBarController = segue.destinationViewController as! UITabBarController
        firstTabViewController = (tabViewController.customizableViewControllers![0] as! UserAccountViewController)
        firstTabViewController.userObj = arrayForTable![selectedIndex] as? User

    }
}

注意:上面代码片段的提示

  • User 是存储用户信息的模型对象
  • 我的视图控制器segue连接到故事板中的TabViewContoller,segue名称为 "userAccountSegue"

0
将一个属性添加到目标视图控制器(子类化的选项卡控制器)中,然后在源视图控制器中实现 prepareForSegue 以将信息传递给目标控制器。然后,您可以使用目标视图控制器的viewDidLoad 响应在源视图控制器的prepareForSegue 中传递给它的数据。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接