【问题标题】:Transfer data between view controllers, using storyboard and TabBarController在视图控制器之间传输数据,使用故事板和 TabBarController
【发布时间】:2015-09-15 03:15:39
【问题描述】:

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

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

它创建了一个新的视图控制器实例,并没有从现有的获取信息的地方调用方法。

有什么办法可以解决这个问题吗?还是我必须以编程方式使用segues? 如果是,如何以编程方式更改选项卡?

【问题讨论】:

  • 使用本地通知怎么样?

标签: ios objective-c viewcontroller


【解决方案1】:
        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];

【讨论】:

    【解决方案2】:
    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 中将以下方法添加到您的 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/

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多