我有两个视图控制器,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/

10-13 09:25