当我们从第二视图控制器返回到主视图控制器时,为什么我的UITextField数据会丢失?

时间:2017-01-27 06:55:06

标签: ios objective-c uitextfield

我有三个视图控制器(第一个,第二个和第三个视图控制器),第一个视图控制器和第二个视图控制器各有4个UITextField,在输入文本字段中的数据之后我们可以从一个VC转到另一个VC随着数据,最后我们在第三个VC中显示数据。问题是当我们从第二个回到第一个时,文本字段就不再存在了。不知道为什么会这样?如何解决这个问题呢?请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

当您推送或提供新的UIViewController时,您可以使用它发送数据,但是当您到达第二个UIViewController时,您的第一个UIViewController会从手机中释放空间,因此您的所有数据都会在之前的屏幕中丢失了。

并且您唯一的选择是在转到第二个UIViewController时发回您发送的数据,而您可以通过创建委托类来发送数据。

创建一个头文件,让我们说Sample.h并在其中创建这个方法,你可以选择你想要的数据类型。

- (void)secVCDidDismisWithData:(NSDictionary *)data;

在.h文件的第二个UIViewController中导入头文件,并将这行代码放在那里

@property (nonatomic, assign)   id<Sample> delegate;

然后你必须自定义弹出按钮或关闭按钮并放置此代码

[self.navigationController popViewControllerAnimated:YES];
if(_delegate && [_delegate respondsToSelector:@selector(secVCDidDismisWithData:)])
{
    [_delegate secVCDidDismisWithData:@{@"key1":@"value1",@"key2":@"value2"}];
}

然后在第一个UIViewController .m文件中导入你的第二个UIViewController,我相信你已经做过现在或推动屏幕,然后就在下面添加这个行

@interface FirstVC () <Sample>

然后创建第二个UIViewController的对象并将委托设置为self,并将实现委托方法设置为像这样

- (void)secVCDidDismisWithData:(NSDictionary *)data{
     NSLog(@"%@",data);}