我真的很擅长开发iOS应用程序。我目前正在开发一个iPad应用程序,其中有两个UIViewController(A和B)。 A是我的父视图控制器,B是我的UITableView弹出窗口,它覆盖整个A。
在B选择一行后,我设法解雇了B,但它没有反映对A所做的更改。 我如何重新加载父视图或者像android这样的onResume方法。 或者解决这个问题的方法。
请给我一些指示,已经被困了几个小时。感谢
答案 0 :(得分:0)
这取决于具体情况。我会建议两种方式:
如前所述,您可以创建一个委托机制,以便控制器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:
。
答案 1 :(得分:-1)
使用– popoverDidClose:
NSPopover类委托方法更新数据,或者您可以使用cocoa绑定。
答案 2 :(得分:-1)
两件事:
1)您希望确保您是用于显示弹出视图控制器“B”的UIPopoverController的委托。请参阅此处的文档:https://developer.apple.com/library/ios/documentation/uikit/reference/UIPopoverControllerDelegate_protocol/Reference/Reference.html
然后你会想要实现其中一种方法,例如:
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { // Reload my view controller "A" }
2)你怎么知道在视图控制器B中选择了哪一行?您可能正在更新两个视图控制器都可以访问的单例,但更好的设计模式可能是创建自己的协议,而视图控制器“A”可以符合它。在这种情况下,视图控制器B应具有weak
delegate
属性,以便在用户选择行时向其发送消息。只需看看另一个使用委托/协议模式的类来查看它是如何工作的,你甚至可以通过CMD +点击类名来查看UIPopoverController
的.h文件,或者通过CMD + Shift + O查看文件名。
答案 3 :(得分:-1)
你能不能使用- (void)viewWillAppear:(BOOL)animated
?