我有两个名为RootViewController
和CountrySelectionActivityViewController
的控制器。我编写了一个prepareForSegue函数来将数据从第一个视图传递到第二个视图。我有一个导航控制器,其中嵌入了视图。所以,这是我的代码:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
if (segue.identifier == "next") {
let mynavigationController = segue.destinationViewController as UINavigationController
let vc = mynavigationController.topViewController as CountrySelectionActivityViewController
vc.countries = countries
}
}
如果我注释掉这段代码,我的应用程序会运行并移动到下一个viewcontroller。但是,如果未实现此功能,则不会传递数据。我的实施有什么问题?
答案 0 :(得分:0)
我希望实现与您相同的目标,在执行segue时在控制器之间传递变量。
我的解决方案是在每个控制器中创建两个变量,并通过自定义segue将它们相关联。
为了定义自定义segue,我们创建了一个新类:CustomPushSegue.m。此文件具有-(void)perfom
的实现。此类的类型为UIStoryboardSegue
,其源和目标变量的类型为UIViewController
。
然后我的想法是将目标和原点的每个viewController转换为自定义控制器并传递变量:
#import "OriginController.h"
#import "DestinationController.h"
-(void) perform {
UIViewController *destinationController = self.setinationViewController;
UIViewController *originController = self.sourceViewController;
if ([[self identifier] isEqualToString : @"Segue"]){
(DestinationController*) destinationController.var1 = (OriginController*) originController.var1;
}
//Stuff related to the performance of the Segue goes here
}
如果您需要更多信息,请询问。我可以寄给你一些样本文件。