在我的应用程序中,我使用的是导航控制器。我的问题是,当我转到上一个视图然后返回当前视图时,此视图中的所有 TextField 都是空的。
当我从导航控制器浏览堆栈时,我不知道如何保存这些值(在文本字段中)。
这是我调用 popViewControllerAnimated 的方法:
- (IBAction)swipeBack:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
在我的应用程序中,我使用的是导航控制器。我的问题是,当我转到上一个视图然后返回当前视图时,此视图中的所有 TextField 都是空的。
当我从导航控制器浏览堆栈时,我不知道如何保存这些值(在文本字段中)。
这是我调用 popViewControllerAnimated 的方法:
- (IBAction)swipeBack:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
在您之前视图的 .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 属性。希望它会有所帮助。
当您推送或弹出视图控制器时,它会分别从内存中加载或卸载。您需要在弹出控制器之前保存信息,并在分配新控制器之后加载信息,然后再将其推入堆栈。您可以使用NSUserDefaults
基本文件 I/O 来保存和重新加载您的信息。
保存:
加载:
为什么不将它设置为一个属性来存储它?当你想推它显示时,你只能在它是 nil 成员时分配它。
这里有两件事要解决: 1. 保存文本字段的内容。2. 再次推送视图控制器时恢复文本字段的内容。
您可以通过将文本字段值保存到全局对象(如 AppDelegate 或任何其他全局单例)来解决第一个问题。
处理 2 的最佳方法是使用文本字段为视图控制器创建初始化程序。例如:
- (id)initWithOptions:(NSDictionary*)options;
然后,当您需要将控制器压入堆栈时,您从 1 中从全局存储中获取先前保存的值,并将它们传递到选项字典中。然后,在viewDidLoad中,将值分配给字段。