将字符串从UINavigationController传递给ViewController

时间:2014-04-16 15:54:19

标签: ios objective-c uinavigationcontroller

我有三个班级:

1.TyphoonViewController 2.WaterTableNaviController 3.WaterTableViewController

我正在尝试将字符串从第一个字符串传递到最后一个字符串。但我只将字符串从第一个传递到第二个。当我呈现第三个ViewController时,它将是黑屏。

我试图让WaterTableViewController成为storyboard中WaterTableNaviController的根目录。 它确实显示了屏​​幕,但字符串未通过。

来自TyphoonViewController

- (IBAction)ParseBut:(id)sender {
WaterTableNaviViewController *vc = (WaterTableNaviViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTableNavi"];
[vc setUrl:@"My String"];
[self presentViewController:vc animated:YES completion:nil];
}

来自WaterTableNaviController

- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:YES];

WaterTableViewController* vc = (WaterTableViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"WaterTable"];
[vc setParseUrl:m_url];
[self.navigationController pushViewController:vc animated:YES];
}

2 个答案:

答案 0 :(得分:2)

导航控制器中的代码是错误的 - 如果WaterTableVC是导航控制器的根视图控制器,它已经被实例化,所以你不应该再这样做了。此外,您不要推送到根视图控制器。您根本不需要将导航控制器子类化,以完成您在此处尝试执行的操作。您应该从TyphoonViewController中的按钮到导航控制器进行模态segue,并使WaterTableViewController成为该导航控制器的根视图控制器。该按钮不应该有任何操作方法,因为它直接触发segue。相反,您应该在prepareForSegue中使用以下代码,

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    UINavigationController *nav = segue.destinationViewController;
    WaterTableViewController *waterTableVC = (WaterTableViewController *)nav.topViewController;
    [waterTableVC setURL:@"My String"];
}

答案 1 :(得分:-1)

您可以简单地创建另一个单例类并放置一个可以包含该字符串的属性,因此无论您身在何处,都可以读取该属性