我实际上是开发 iOS 应用程序的新手。我目前正在开发一个 iPad 应用程序,其中有两个 UIViewController(A 和 B)。A 是我的父视图控制器,B 是我的 UITableView 弹出框,它不覆盖整个 A。
在 B 处选择行后,我设法解除了 B,但它不反映对 A 所做的更改。我如何重新加载父视图或者是一个类似于 android 的东西,称为 onResume 方法。或者解决这个问题的方法。
请给我一些指示,已经被困了几个小时。谢谢
我实际上是开发 iOS 应用程序的新手。我目前正在开发一个 iPad 应用程序,其中有两个 UIViewController(A 和 B)。A 是我的父视图控制器,B 是我的 UITableView 弹出框,它不覆盖整个 A。
在 B 处选择行后,我设法解除了 B,但它不反映对 A 所做的更改。我如何重新加载父视图或者是一个类似于 android 的东西,称为 onResume 方法。或者解决这个问题的方法。
请给我一些指示,已经被困了几个小时。谢谢
这取决于实际情况。我建议两种方法:
正如之前有人提到的,您可以创建一个委托机制,以便控制器 B 可以调用-reloadData
控制器 A 上的类似内容。这是一种紧密耦合,但可以解决您的问题。
您可以NSNotification
从控制器 B 发布 a,然后在控制器 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
}
不要忘记调用-removeObserver:name:object:
控制器 A 拆解。
使用– popoverDidClose:
NSPopover 类委托方法更新您的数据,或者您可以使用可可绑定。
两件事情:
1)你要确保你是你用来显示你的弹出视图控制器“B”的 UIPopoverController 的代表。请参阅此处的文档: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
属性,当用户选择一行时它会向该属性发送消息。只需查看另一个使用委托/协议模式的类,看看它是如何工作的,您甚至可以UIPopoverController
通过 CMD + 单击类名或 CMD + Shift + O 来查看 .h 文件的文件名。
你不能用- (void)viewWillAppear:(BOOL)animated
吗?