0

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

这是故事板设置

视图控制器 A 是根视图控制器。视图 B 和视图 C 分别从它扩展而来。表视图从视图 C 扩展。视图 B 有 2 个按钮 - 到表视图和视图 B。(我忘记在视图 B 上添加 textField,并从 B 到 A)

1) Button To Table View 推动 Table View。表格单元格包含一个字符串。按下单元格,视图返回到视图控制器 C,并且该字符串显示在文本字段中。

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

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

解决方案?点击文本框选择它,然后按返回按钮更新视图C。但是如何实现呢?

还是有更好的解决方案?

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

我可以以某种方式将推送转至视图 B,它的后退按钮指向视图 A?

[编辑]

为了在视图控制器之间传递数据,我使用了 NSUserDefaults。事实证明,这是在视图之间传递简单数据(字符串、数字等)的非常有效的方式

热将它用于 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];
4

1 回答 1

0

当我们解决每个问题时,我会更新这个答案。

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

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

如果您想从视图 C 返回视图 A(前提是您以模态方式呈现),则推送视图将导致下一个视图被放置在顶部,您可以使用上面相同的代码从 C 返回到 A

基本上在这种情况下:

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

然后您必须在 TableViewController 中调用上述代码一次,然后在 ViewController C 中再次调用上述代码,然后返回 A

至于让B点回到A,如果你从A到B会更容易但是如果你真的不需要从A到BI建议改变结构。

但是为了满足您的要求,切换视图层次结构的一种方法是关闭视图 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];

我希望这是有帮助的。

于 2013-11-13T23:03:38.340 回答