真的希望有人可以提供帮助,因为我觉得我已经尝试过在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天。
答案 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,但仅适用于这种情况