0

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

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

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

4

4 回答 4

0

这取决于实际情况。我建议两种方法:

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

  2. 您可以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 拆解。

于 2013-09-16T15:59:25.417 回答
-1

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

于 2013-09-16T03:53:17.320 回答
-1

两件事情:

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 文件的文件名。

于 2013-09-16T04:20:27.233 回答
-1

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

于 2013-09-16T15:36:29.073 回答