我有两个视图控制器,MainViewController和SecondViewController。
在主视图控制器中,我将数据传递给第二个视图控制器,如下所示:
-(IBAction)shareToSocial:(id)sender {
SecondViewController *view2 = (SecondViewsController *)[storyboard instantiateViewControllerWithIdentifier:@"PushToNext"];
view2.secTitle = self.MainTitle;
[self.navigationController setModalPresentationStyle: UIModalPresentationCurrentContext];
[self setModalPresentationStyle:UIModalPresentationCurrentContext];
}
对于每个控制器,secTitle和MainTitle均为NSString。根据我的阅读,通过将view2.secTitle设置为self.MainTitle,当SecondViewController弹出时,我的view2.secTitle将具有与MainTitle相同的值。因此,如果MainTitle是“Hello World”,那么我打开secondViewController,secTitle也将是“Hello World”。但是,即使我正在为其设置数据,secTitle也一直为空。
如果我使用pushViewController而不是模式,则可以在两个控制器之间传递值。因此,我不确定在这里是否确实做错了什么。
我也尝试过使用[view2 setSecTitle:MainTitle]无济于事。
我的SecondViewController上没有太多代码,但是看起来是这样的:
-(IBAction)showMessage:id(sender){
NSLog(@"test: %@", self.secTitle);
}
-(IBAction)closeMessage:id(sender){
[self dismissViewControllerAnimated:YES completion:nil];
}
另外,我注意到,当我在SecondViewController上使用dismissViewControllerAnimated将其关闭并返回MainViewController时,会显示黑屏几秒钟,然后再显示Main View,并且不再检测到MainViewController上的touch事件。
请帮忙。
最佳答案
您可以使用performSegueWithIdentifier和prepareForSegue吗?如果您在情节提要中拥有视图并在它们之间建立视图,则为其指定一个标识符并将样式设置为模式,您应该可以做到这一点:
-(IBAction)shareToSocial:(id)sender {
[self performSegueWithIdentifier:@"modelToNextSegue" sender:self];
}
然后在prepareForSegue方法中传递值:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
SecondViewController *view2 = [segue destinationViewController];
view2.secTitle = self.MainTitle;
}
关于ios - 使用模式时将数据传递给UIViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19854706/