iOS - 为什么我不能两次使用同样的方式来使用pushViewController?
iOS - 为什么我不能两次使用同样的方式来使用pushViewController?
我目前有三个视图控制器:ViewController1 ViewController2
和ViewController3
。我试图在ViewController1
和ViewController2
之间以及ViewController2
和ViewController3
之间传递数据。
例如,要将ViewController1
中的数据user
传递给ViewController2
,我使用以下代码:
ViewController2 *vc2 = [[ViewController2 alloc]init]; vc2.user = _user; [self.navigationController pushViewController:vc2 animated:YES];
但是,如果我尝试从ViewController2
传递user
到ViewController3
,我不能使用上述方法...屏幕上只会出现一个黑色的视图控制器。
相反,我尝试了以下方法,它可以正常工作:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; ViewController3 *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"vc3Storyboard"]; vc3.user = _user; [self.navigationController pushViewController:vc3 animated:YES];
为什么我不能使用我在vc1 -> vc2中使用的相同方法?
ViewController3 *vc3 = [[ViewController3 alloc]init]; vc3.user = _user; [self.navigationController pushViewController:vc3 animated:YES];
问题:为什么我无法连续两次使用pushViewController方法?
原因:在iOS中,pushViewController方法只能用于将一个视图控制器推入导航栈中一次。如果尝试连续两次使用该方法,第二次调用将无效。
解决方法:可以通过以下两种方式解决该问题:
1. 使用以下代码获取导航控制器的视图控制器数组,并通过索引位置获取需要的视图控制器:
NSMutableArray* array = [self.navigationController viewControllers]; FirstViewController* viewFirst = [array objectAtIndex:0]; ThirdViewController* thirdView = [array objectAtIndex:2]; thirdView.view.backgroundColor = viewFirst.view.backgroundColor;
2. 如果第一种方法不起作用,可以使用NSNotification来完成任务。
问题:为什么我无法像第一次那样使用pushViewController?
问题的原因是,在使用pushViewController之前,需要先初始化你的viewController。具体的解决方法如下:
首先,根据Hartman的说法,你必须初始化你的viewController:
ViewController2 * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController2"]; vc.user = _user; [[self navigationController] pushViewController:vc animated:YES];
然后,在你的ViewController2和ViewController3中,变量"user"必须如下所示:
@property (nonatomic, copy) NSString *user; @synthesize user;
现在,你可以像在ViewController2中一样导航到ViewController3:
ViewController3 * vc = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController3"]; vc.user = user; [[self navigationController] pushViewController:vc animated:YES];
你可以从Storyboard的Identity inspector中找到ViewController的标识符:
![enter image description here](https://i.stack.imgur.com/h0r2Z.png)
通过以上步骤,你就可以解决无法再次使用pushViewController的问题了。