模态segue完成后更新数据

时间:2015-03-16 13:32:50

标签: ios xcode swift

如何解除模态segue后更新数据?我认为最好的方法是使用通知,但我不知道如何在关闭模态segue后在主视图中设置通知。

E.g。我有“登录”模态视图,当用户点击“完成”模态视图时,主视图从NSUserDefaults读取新数据并显示新数据。

@IBAction func doneClicked(sender: AnyObject) {
    settings.synchronize()
    self.dismissViewControllerAnimated(true, completion: nil)
}

3 个答案:

答案 0 :(得分:0)

使用您在self.dismissViewControllerAnimated

中设置为nil的完成处理程序

而不是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/