Ios 将字符串从UINavigationController传递到ViewController
我有三门课: 1.1.1视图控制器 2.水位控制器 3.水位控制器Ios 将字符串从UINavigationController传递到ViewController,ios,objective-c,uinavigationcontroller,Ios,Objective C,Uinavigationcontroller,我有三门课: 1.1.1视图控制器 2.水位控制器 3.水位控制器 - (IBAction)ParseBut:(id)sender { WaterTableNaviViewController *vc = (WaterTableNaviViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTableNavi"]; [vc setUrl:@"My String"]; [self presen
- (IBAction)ParseBut:(id)sender {
WaterTableNaviViewController *vc = (WaterTableNaviViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTableNavi"];
[vc setUrl:@"My String"];
[self presentViewController:vc animated:YES completion:nil];
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];
WaterTableViewController* vc = (WaterTableViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTable"];
[vc setParseUrl:m_url];
[self.navigationController pushViewController:vc animated:YES];
}
我正在试着把一根绳子从第一根传到最后一根。但是我只把字符串从第一个传递到第二个。当我展示第三个ViewController时,它将是一个黑屏
我已尝试使WaterTableViewController成为故事板中WaterTableNaviController的根。
它确实显示了屏幕,但字符串没有传递
来自TyphonViewController
- (IBAction)ParseBut:(id)sender {
WaterTableNaviViewController *vc = (WaterTableNaviViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTableNavi"];
[vc setUrl:@"My String"];
[self presentViewController:vc animated:YES completion:nil];
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];
WaterTableViewController* vc = (WaterTableViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTable"];
[vc setParseUrl:m_url];
[self.navigationController pushViewController:vc animated:YES];
}
从水位控制器
- (IBAction)ParseBut:(id)sender {
WaterTableNaviViewController *vc = (WaterTableNaviViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTableNavi"];
[vc setUrl:@"My String"];
[self presentViewController:vc animated:YES completion:nil];
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];
WaterTableViewController* vc = (WaterTableViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTable"];
[vc setParseUrl:m_url];
[self.navigationController pushViewController:vc animated:YES];
}
您只需创建另一个singleton类并放置一个可以包含该字符串的属性,这样无论您身在何处,都可以读取该属性导航控制器中的代码是错误的-如果WaterTableVC是导航控制器的根视图控制器,它已经被实例化,因此您不应该再这样做。此外,您也不会推送到根视图控制器。您根本不需要对导航控制器进行子类化,就可以完成这里要做的事情。您应该从TyphonViewController中的按钮到导航控制器进行模式切换,并使WaterTableViewController成为该导航控制器的根视图控制器。按钮不应该有任何操作方法,因为它直接触发segue。相反,您应该在prepareForSegue中有以下代码
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UINavigationController *nav = segue.destinationViewController;
WaterTableViewController *waterTableVC = (WaterTableViewController *)nav.topViewController;
[waterTableVC setURL:@"My String"];
}
您使用InstanceEviewController WithiIdentifier而不是在故事板中使用segue有什么特别的原因吗?我认为这个解决方案并不奇怪,因为它遵循了最常用的设计模式之一,简化了这些操作,而忽略了所有其他好处。。。