关闭 Popover 并重新加载 parentViewController

Posted

技术标签:

【中文标题】关闭 Popover 并重新加载 parentViewController【英文标题】:Dismissing Popover and reload parentViewController 【发布时间】:2013-09-16 03:24:41 【问题描述】:

我实际上是开发 ios 应用程序的新手。我目前正在开发一个 iPad 应用程序,其中有两个 UIViewController(A 和 B)。 A 是我的父视图控制器,B 是我的 UITableView 弹出框,它不覆盖整个 A。

在 B 处选择行后,我设法解雇了 B,但它不反映对 A 所做的更改。 我如何重新加载父视图或者是一个类似于 android 的东西,称为 onResume 方法。 或者解决这个问题的方法。

请给我一些指示,已经卡了几个小时了。谢谢

【问题讨论】:

您需要使用委托模式。 ***.com/questions/8055052/… 【参考方案1】:

视情况而定。我建议两种方法:

    正如之前有人提到的,您可以创建一个委托机制,以便控制器 B 可以在控制器 A 上调用类似 -reloadData 的内容。这是一种紧密耦合,但可以解决您的问题。

    您可以从控制器 B 发布 NSNotification,然后在控制器 A 中收听它。在控制器 B 中:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    
        // Do your logic here
    
        [[NSNotificationCenter defaultCenter] postNotificationWithName:@"SettingsSavedNotification" object:nil];
    
        // Dismiss B controller
    
    

    在控制器 A 中:

    - (void)viewDidLoad
    
        [super viewDidLoad];
    
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveSettingsSavedNotification:) name:@"SettingsSavedNotification" object:nil];
    
        // Proceed with controller/view setup
    
    
    - (void)didReceiveSettingsSavedNotification:(NSNotification *)notification
    
        // Reload data here
    
    

    不要忘记在控制器 A 拆卸时调用 -removeObserver:name:object:

【讨论】:

【参考方案2】:

使用– popoverDidClose: NSPopover 类委托方法来更新您的数据,或者您可以使用可可绑定。

【讨论】:

NSPopover 不是类名,popoverDidClose: 不是真正的选择器。 NSPopover 是一个类并且 popoverDidClose: 真正的选择器。我的错误是这个 OS X 的答案。 啊,我的错。这就说得通了。仍然不是 iOS 的答案。【参考方案3】:

两件事:

1) 你要确保你是 UIPopoverController 的代表,你用来显示你的弹出视图控制器“B”。在此处查看文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html

然后你会想要实现其中一种方法,例如:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController // 重新加载我的视图控制器“A”

2) 你如何知道在视图控制器 B 中选择了哪一行?您可能正在更新两个视图控制器都可以访问的一些单例,但更好的设计模式可能是创建您自己的协议并让视图控制器“A”符合它。在这种情况下,视图控制器 B 应该有一个 weak delegate 属性,当用户选择一行时它会向该属性发送消息。只需查看另一个使用委托/协议模式的类,看看它是如何工作的,您甚至可以通过 CMD + 单击类名或 CMD + Shift + O 到文件名来查看UIPopoverController 的 .h 文件。

【讨论】:

【参考方案4】:

你不能只使用- (void)viewWillAppear:(BOOL)animated 吗?

【讨论】:

以上是关于关闭 Popover 并重新加载 parentViewController的主要内容,如果未能解决你的问题,请参考以下文章

bootstrap popover:使用 ajax 重新加载内容

如何关闭 AirPrint Popover?

UITableView - 从单独的类中重新加载数据

从 Popover 关闭或弹出到根视图控制器

无法保存数据并从关闭中重新加载表视图

成功登录后关闭 Kendo UI 窗口并重新加载父页面