使用storyboard和TabBarController在视图控制器之间传输数据

时间:2015-06-28 17:06:41

标签: ios objective-c viewcontroller

我有一个Login ViewController和一个带有两个“标签”的标签栏控制器。现在我想将数据从Login VC传输到其中一个TabBar VC。如果Login VC收到某些信息,它应该调用其中一个TabBar VC中的方法。我用故事板创建了所有视图控制器。我不使用视图控制器的编程segue。 因此我尝试使用协议和委托。但是当我编写这样的代码时:

LoginViewController *loginVC = [[LoginViewController alloc] init];
loginVC.myTestDelegate = self;

它创建了一个视图控制器的新实例,并没有采用现有的信息来调用该方法。

有没有办法解决这个问题?或者我必须以编程方式使用segues? 如果是,我如何以编程方式更改选项卡?

2 个答案:

答案 0 :(得分:0)

        YourViewController* pdvc = [[YourViewController alloc] init];

        pdvc.selectedImage = selectedPhoto;
        pdvc.selectedObj = theObject;
        pdvc.selectedImg = theImage;
        [self presentViewController:pdvc animated:YES completion:nil];

        YourViewController* nextView = [self.storyboard
                                   instantiateViewControllerWithIdentifier:
                                   @"YOUR_NEXT_STORYBOARD_ID"];

                            [nextView setYOUR_VALUE:value];

                            [self presentViewController:nextView
                                                       animated:YES
                                                     completion:nil];

答案 1 :(得分:0)

  1. 如果要在loginViewController接收数据时导航到要向其传递数据的同一viewController,则可以使用以下方法,该方法在从当前视图开始转换时触发。

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
            if ([segue.identifier isEqualToString:@"yourViewIdentifier"]) {
                  RecipeDetailViewController *destViewController = segue.destinationViewController;
                  destViewController.recievingData = yourDataToPass;
            }
    }
    
  2. 第二种方法是使用NSNotificationCenter类添加观察者: 在viewDidLoad:method

    中将以下方法添加到TabBar VC
    [[NSNotificationCenter defaultCenter] addObserver:self
        selector:@selector(viewDidReceivedData:)
        name:"ReceivedData" object:nil];
    

    并实施以下方法:

    - (void)viewDidReceivedData:(id)receivedData{
    }
    

    在loginViewController中,一旦收到传递给viewcontroller调用的必要信息,请执行以下操作:

    [[NSNotificationCenter defaultCenter] postNotificationName:@"ReceivedData" object:yourData];
    

    参考:http://www.hpique.com/2013/12/nsnotificationcenter-part-1/