如何解除模态segue后更新数据?我认为最好的方法是使用通知,但我不知道如何在关闭模态segue后在主视图中设置通知。
E.g。我有“登录”模态视图,当用户点击“完成”模态视图时,主视图从NSUserDefaults读取新数据并显示新数据。
@IBAction func doneClicked(sender: AnyObject) {
settings.synchronize()
self.dismissViewControllerAnimated(true, completion: nil)
}
答案 0 :(得分:0)
使用您在self.dismissViewControllerAnimated
而不是nil,在完成解除后,使用要运行的代码放入一个完成处理程序。
一种替代的,可能更好的选择,是不要从控制器本身而是从呈现它的控制器中解除控制器。
将一个块属性添加到名为onDone
的控制器中,该控制器可以由执行该呈现的控制器注册。在您的按钮操作中,只需调用此onDone
块即可。将通知提供控制器的控制器,可以致电dismissViewController
并使用完成情况来整理。
这是一种更好的方法,因为它可以通过以下多种方式提升按钮来控制控制器:推送,模态或在iPad上使用popover。由于演示者知道演示者如何呈现控制器,因此让演示者也可以轻松处理这些不同的选项。
答案 1 :(得分:0)
视图从屏幕消失时触发通知
-(void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] postNotificationName:@"loginNotification" object:nil];
}
要么
[self dismissViewControllerAnimated:YES completion:^{
[[NSNotificationCenter defaultCenter] postNotificationName:@"loginNotification" object:nil];
}];
答案 2 :(得分:0)
如果您使用的是故事板,请使用展开segues。然后你只需使用segue.sourceViewController
并从 - now dismissed - modal viewcontroller中获取所需的数据。在您的情况下,您甚至不需要来自模态视图控制器的任何数据,因此只需在unwindSegue IBAction方法中放置您想要的任何数据。
指南: http://spin.atomicobject.com/2014/10/25/ios-unwind-segues/