关闭 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的主要内容,如果未能解决你的问题,请参考以下文章