将数据从一个视图控制器传递到另一个; iOS <= 4 vs iOS 5

前端之家收集整理的这篇文章主要介绍了将数据从一个视图控制器传递到另一个; iOS <= 4 vs iOS 5前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,一点背景.我是iOS开发的新手,我已经在.Net上呆了很长时间了,这可能就是为什么我甚至都会问这个问题,但是这里也是如此.

基本设置是这样的.你有一个带有RootViewController的UINavigationController,我们将调用MasterViewController.当在这个MasterViewController上发生某些动作时,我们想要钻进一个DetailsViewController.但是,我们还想将一些数据传递给DetailsViewController.

我的理解是,在SDK的早期版本(iOS 5之前)中,这种方法与此类似:

@implementation MasterViewController

    -(IBAction)someAction
    {
       DetailsViewController *dvc = [[DetailsViewController alloc]initWithNibName:@"DetailsView" bundle:nil];
       dvc.someDataProp = [self getSomeDataSomeHow];
       [[self navigationController] pushViewController:dvc animated:YES];
    }

@end

然而现在,在iOS 5中,似乎现在使用Storyboard和segues完成.在XCode中,您将从MasterViewController设置为segue到DetailsViewController,然后在代码中执行以下操作:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   [segue.destinationViewController setSomeDataProp:[self getSomeDataSomeHow]];
}

我的问题基本上是这样的:对我而言,旧方法对我来说感觉更清洁了.您对要推送到导航堆栈的ViewController的类型非常明确,您可以在其上轻松设置属性.但是在新方法中,destinationViewController的类型为id(出于显而易见的原因),它对我来说感觉不那么干净.再次,这可能是我的.Net方面出现,但这在iOS中常见吗?只是使用id并谨慎对待风?

解决方法

使用Storyboard,您可以为segue分配命名标识符,
选择segue,然后在属性检查器中,您可以为segue标识符添加名称.

在prepareForSegue方法中,您应该检查此标识符,因此您将明确知道将要执行哪个segue以及destinationViewController将是什么.

if ([segue.identifier isEqualToString:@"My First Segue Identifier"])
{    
   DetailsViewController *dvc = (DetailsViewController *) segue.destinationViewController;
   // Set the DVC's properties 
}
原文链接:https://www.f2er.com/iOS/331736.html

猜你在找的iOS相关文章