如何将数据传递到容器视图中的视图控制器?

时间:2016-06-03 02:04:09

标签: ios objective-c uiviewcontroller

我只是iOS编程的新手。

我最近遇到了一个棘手的问题。场景是:我现在有一个UIViewController(假设它被称为A)并且它包含一个容器视图,该容器视图包含UITableViewController(让我们称之为B) 。当我在NSMutableArray中按UIButton时,我只想将UIViewController从A传递到B.但是,由于embed segue的设计可以在UITableViewController's加载后立即执行viewDidLoad UIViewController方法。

有没有人知道在这种情况下传递数据?只是想知道...

更新: [这两个VC的故事板] [1]

enter image description here

2 个答案:

答案 0 :(得分:1)

任何原因你都不能简单地在prepareForSegue方法中传递它:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.identifier {

    case "tableViewController"?:
        if let tableViewVC = segue.destinationViewController as? TableViewVC {
            tableViewVC.myArray = passedArray
        } ...

哦 - obj-c在伪代码中会是这样的:

- (void)prepareForSegue:(NSStoryboardSegue*)segue sender:(id)sender {

if ([[segue identifier] isEqualToString:@"tableViewController"]) {

    NSViewController *vc = [segue destinationController];
    if ([vc isKindOfClass:[tableViewVC class]]) {
        tableViewVC.myArray = passedArray;

没看到你的标签:]

编辑: 以下是通过通知的内容的粗略剖视图: 在你的UIViewController的头部声明:

#define nArrayReadyNotification @"ArrayReadyNotification"

在你的UIViewController的.m文件中,一旦发送了数组就发送通知:

[[NSNotificationCenter defaultCenter] postNotificationName: nArrayReadyNotification object:ARRAY];

在tableView的viewDidLoad中注册通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(arrayReceived:) name: nArrayReadyNotification object:nil];

这将是表视图中的arrayReceived方法:

- (void) arrayReceived:(NSNotification *)notificaiton {

NSArray *array = [notificaiton object];
if (array != nil) {

    ...
}

最后在dealloc中使用以下命令取消注册表视图:

- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];

这应该随时发送 - 也许是关闭计时器。 KVO虽然是我的偏好。

答案 1 :(得分:0)

ContainerView做3件事

[A.view addSubview:B.view]
[A addChildViewController:B]
[B didMoveToParentViewController:A]

如果你只想从A到B传递NSMutableArray,你可以这样做

UITableViewController *second = A.childViewControllers[0]
second.XXXXX = .....