通过导航控制器通过segue传递数据 - 目标C.

时间:2016-04-05 16:37:08

标签: ios objective-c uiviewcontroller uinavigationcontroller segue

真的希望有人可以提供帮助,因为我觉得我已经尝试过在SC上找到的所有选项。首先抱歉,如果代码很乱或这是一个愚蠢的问题,开发不是我最强的观点:/

基本上我有一个在故事板中创建的iPad专用应用程序,我有许多视图控制器和场景,并嵌入了导航控制器。该应用程序是非常线性的,它只是按顺序在每个屏幕上移动(你根本无法在应用程序内跳转)。

在第一个屏幕上,用户可以通过2个按钮进行2个选项,这些选项每个都显示一个图像,他们选择的任何图像也需要在每个下一个屏幕上显示。

当我没有嵌入导航控制器时,通过调用以下内容可以正常工作:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"passSegue"] && (parentImage.hidden == NO) && (parentImage2.hidden == NO)) {
    ViewControllerGirl2 * vc = [segue destinationViewController];
    UIImage *imageView = [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/1.png"]];
    UIImage *imageView2 = [UIImage imageWithContentsOfFile:[[[NSBundle mainBundle] bundlePath] stringByAppendingString:@"/2.png"]];
    vc.parentImage = imageView;
    vc.parentImage2 = imageView2;    
}

但是现在我已经嵌入了UINavigationController,我的图像不再出现在下一个屏幕上。我尝试了以下建议的方法:

UINavigationController *navController = [segue destinationViewController];
ViewControllerGirl2 *vc = (ViewControllerGirl2 *)navController.topViewController;

但我试图实施这些建议的每一种方式都崩溃了。

任何帮助都会非常感激,因为我已经坚持了2天。

3 个答案:

答案 0 :(得分:0)

作为快速解决方法(如果您将UINavigationController子类化),您可以向其添加parentImage属性,并在prepare for segue内部将图像值分配给导航控制器的那些属性。然后在目标视图控制器的viewWillAppear中,您可以执行以下操作:

self.parentImage = yourNavController.yourImageProperty1;
self.parentImage2 = yourNavController.yourImageProperty1; 

答案 1 :(得分:0)

我的目标视图控制器是导航上下文。试试这个

UINavigationController * navController = [segue destinationViewController];

viewControllerGirl2 * vc2 =(ShowItemsTableViewController *)([navController viewControllers] [0]);

希望这会对你有所帮助。 。

答案 2 :(得分:0)

prepareforsegue用于实例化控制器,而不是UI属性,但如果需要设置UI属性,则使用父级的viewDidLoad:

// in interface declare this
@property (nonatomic, weak) ViewControllerGirl2 *childViewController;

// in viewDidLoad
- (void)viewDidLoad
{
    [super viewDidLoad];

    UIImage *image = [UIImage imageNamed:@"1.png"];
    self.childViewController.parentImage = image;
}

// in segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.destinationViewController isKindOfClass:[ViewControllerGirl2 class]]) {
        self. childViewController = segue.destinationViewController;
    }
}

prepareforsegue在viewDidLoad之前运行,你也可以在它的位置使用viewWillAppear,但仅适用于这种情况