解散Popover并重新加载parentViewController

时间:2013-09-16 03:24:42

标签: ios ipad uipopovercontroller

我真的很擅长开发iOS应用程序。我目前正在开发一个iPad应用程序,其中有两个UIViewController(A和B)。 A是我的父视图控制器,B是我的UITableView弹出窗口,它覆盖整个A。

在B选择一行后,我设法解雇了B,但它没有反映对A所做的更改。 我如何重新加载父视图或者像android这样的onResume方法。 或者解决这个问题的方法。

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

4 个答案:

答案 0 :(得分:0)

这取决于具体情况。我会建议两种方式:

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

    < / LI>
  2. 您可以从控制器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