XCode - 导航控制器推送Segue - 在视图和Skip导航序列之间传递数据

时间:2013-11-11 11:59:06

标签: uinavigationcontroller storyboard uistoryboardsegue

我对这个故事板测试项目有2个问题。我是Xcode的新手,我找不到解决这个问题的方法。

This is Storyboard setup

View Controller A是Root View Controller。视图B和视图C从中延伸出来。表视图从视图C扩展。视图B有2个按钮 - 到表视图和视图B. (我忘了在View B上添加textField,并从B到A进行segue)

1)按钮到表视图推送表视图。 Table Cell包含一个字符串。按下单元格,视图返回到View Controller C,该字符串显示在文本字段中。

问题1:如果我从表视图中使用模态segue来查看C textField将使用方法prepareForSegue更新,但我将丢失视图C上的导航栏。

问题2:如果我使用从表View到View C的push segue,视图C上的后退按钮将不会指向视图A,它将指向表视图。

解决方案? 单击文本字段将其选中,然后按返回按钮以更新视图C.但如何实现?

或者有更好的解决方案吗?

2)我想按下View C上的按钮进入视图B.如果我使用push segue,View B Back按钮将指向视图C.如果我使用模态推送,则视图B丢失导航栏。

我可以以某种方式将push segue推向View B,它是返回按钮指向A?

[编辑]

在视图控制器之间传递数据,我使用了NSUserDefaults。事实证明,它是在Views

之间传递简单数据(字符串,数字等)的非常有效的方法

热卖它用于MODAL segue?在所需的tableViewController中添加

-(void)tableview:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   //define user defaults
   NSUserDefaults *defaults = [NSUserDefaults standardDefaults];
   NSString *testString = @"test";
   [defaults setObject:testString] forKey:@"test1"];
   [defaults synchronize];

   //dismiss ViewController
   [self dismissViewControllerAnimated:YES completion:nil]; }

如果你想使用push segue来关闭视图控制器并跳过导航序列(从序列中删除视图)替换

   [self dismissViewControllerAnimated:YES completion:nil];

   [self.navigationController popViewControllerAnimated:YES];

1 个答案:

答案 0 :(得分:0)

我会在解决每个问题时更新此答案。

如果您使用表格视图作为进行选择的方法,那么您应该改为忽略表格视图控制器而不是以模态方式推送新视图。

//In the table view controller's on cell selected method
[self dismissViewControllerAnimated:YES completion:^{
    //code
}];

如果您想要从视图C返回查看A(如果您以模态方式呈现),则推送视图将导致下一个视图置于顶部您可以使用上面相同的代码从C返回到< / p>

基本上就是这种情况:

View A --modal-> View C --modal-> TableViewController

然后你必须在TableViewController中调用上面的代码一次,再在ViewController C中调用 然后回到A

如果你从B回到A,那么从A到B更容易。但是如果你真的不需要从A到B,我建议改变结构。

但是为了满足您的要求,一种切换视图层次结构的方法是在忽略视图C的同时将B推到A之上。

//Inside View C If you want it to happen only after the first animation completes just move the other line up into the block
[self dismissViewControllerAnimated:YES completion:^{
    //code
}];
[self.parentViewController.navigationController pushViewController:<#(UIViewController *)#> animated:YES];

我希望这会有所帮助。