我有一个Login ViewController和一个带有两个“标签”的标签栏控制器。现在我想将数据从Login VC传输到其中一个TabBar VC。如果Login VC收到某些信息,它应该调用其中一个TabBar VC中的方法。我用故事板创建了所有视图控制器。我不使用视图控制器的编程segue。 因此我尝试使用协议和委托。但是当我编写这样的代码时:
LoginViewController *loginVC = [[LoginViewController alloc] init];
loginVC.myTestDelegate = self;
它创建了一个视图控制器的新实例,并没有采用现有的信息来调用该方法。
有没有办法解决这个问题?或者我必须以编程方式使用segues? 如果是,我如何以编程方式更改选项卡?
答案 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)
如果要在loginViewController接收数据时导航到要向其传递数据的同一viewController,则可以使用以下方法,该方法在从当前视图开始转换时触发。
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"yourViewIdentifier"]) {
RecipeDetailViewController *destViewController = segue.destinationViewController;
destViewController.recievingData = yourDataToPass;
}
}
第二种方法是使用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/