
基本设置是这样的.你有一个带有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 } 总结 以上是内存溢出为你收集整理的将数据从一个视图控制器传递到另一个; iOS <= 4 vs iOS 5全部内容,希望文章能够帮你解决将数据从一个视图控制器传递到另一个; iOS <= 4 vs iOS 5所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)