0

在我的应用程序中,我使用的是导航控制器。我的问题是,当我转到上一个视图然后返回当前视图时,此视图中的所有 TextField 都是空的。

当我从导航控制器浏览堆栈时,我不知道如何保存这些值(在文本字段中)。

这是我调用 popViewControllerAnimated 的方法:

- (IBAction)swipeBack:(id)sender {
    [self.navigationController popViewControllerAnimated:YES];
}
4

4 回答 4

1

在您之前视图的 .h 文件中声明一个属性:

@property (noonatomic, retain) YOURVIEWCONTROLLER *secondVC;

然后在您的@implementation 中,合成属性:

@synthesize secondVC;

然后用以下代码替换将视图控制器呈现为模态视图的代码:

if(!secondVC){
    YOURVIEWCONTROLLER *controller=[[YOURVIEWCONTROLLER alloc]init.......];
    [self setSecondVC:controller];
    [controller release];//if you ain't using arc else just set it to nil
    controller=nil;
}
[self presentModalViewController:self.secondVC animated:YES];

“YOURVIEWCONTROLLER”是包含文本字段的第二个视图控制器类的名称。不要忘记释放 -dealloc 中的 secondVC 属性。希望它会有所帮助。

于 2012-06-19T10:12:49.993 回答
1

当您推送或弹出视图控制器时,它会分别从内存中加载或卸载。您需要在弹出控制器之前保存信息,并在分配新控制器之后加载信息,然后再将其推入堆栈。您可以使用NSUserDefaults基本文件 I/O 来保存和重新加载您的信息。

保存:

  • 使用上述方法之一保存数据。
  • 然后弹出视图控制器。

加载:

  • 加载数据。
  • 分配一个视图控制器。
  • 将数据传递给视图控制器(使用属性、单例等)
  • 推送视图控制器。
于 2012-06-18T13:55:36.130 回答
0

为什么不将它设置为一个属性来存储它?当你想推它显示时,你只能在它是 nil 成员时分配它。

于 2012-06-18T14:30:46.100 回答
0

这里有两件事要解决: 1. 保存文本字段的内容。2. 再次推送视图控制器时恢复文本字段的内容。

您可以通过将文本字段值保存到全局对象(如 AppDelegate 或任何其他全局单例)来解决第一个问题。

处理 2 的最佳方法是使用文本字段为视图控制器创建初始化程序。例如:

- (id)initWithOptions:(NSDictionary*)options;

然后,当您需要将控制器压入堆栈时,您从 1 中从全局存储中获取先前保存的值,并将它们传递到选项字典中。然后,在viewDidLoad中,将值分配给字段。

于 2012-06-18T13:56:04.257 回答