无法在主视图控制器和弹出视图之间传递消息

Posted

技术标签:

【中文标题】无法在主视图控制器和弹出视图之间传递消息【英文标题】:Cannot pass messages between main view controller and popover view 【发布时间】:2011-05-05 11:05:38 【问题描述】:

我的主视图控制器和显示在弹出视图 (iPad) 中的表视图控制器之间似乎无法进行任何类型的通信。

我正在以通常的方式在导航控制器中设置表格视图:

// create popover
    if (self.popoverController == nil) 

    filesViewController = [[[MyTableViewController alloc] initWithFiles:fileList] autorelease];

    UINavigationController *navCtrl = [[[UINavigationController alloc] initWithRootViewController:filesViewController] autorelease];

    self.popoverController = [[UIPopoverController alloc] initWithContentViewController:navCtrl];

        self.popoverController.delegate = self;

        // resize popover
        self.popoverController.popoverContentSize = CGSizeMake(320.0, 44 + [fileList count] * 44);
    

一切正常,我将一个文件名数组 (fileList) 传递到表视图中,该数组作为一个名为 listOfFiles 的数组保存在表视图中。表视图显示文件名,当用户选择一个时,我想将该文件名传递回主视图控制器。但是,我无法从表视图的 didSelectRowAtIndexPath 方法返回到主 VC 的任何通信。我尝试了各种不同方向的出口,我尝试在 didSelectRowAtIndexPath 中创建一个新对象来处理来自表视图的文件名。我可以将文件名传递给新对象,但是当我尝试将其发送到主 VC 时,它再次为空。当弹出框处于活动状态时,我发送到我的主 VC 的所有内容都显示为空。

    - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 

    NSLog(@"%@", handler.addressForImageFile);

    self.popoverController = nil;
    [self.popoverController release];

有什么原因导致我的 Main VC 从我的表视图中除了空对象之外什么都得不到吗?我花了几天时间尝试了很多不同的事情。我觉得我对弹出框如何工作的知识存在一些根本性的差距。当从表视图中选择字符串时,肯定有一种简单的方法可以将字符串发送回我的主 VC?

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

可能有更好的方法来做到这一点,但根据传递字符串的目标,一种方法可能是使用 NSUserDefaults。

【讨论】:

谢谢。我最终通过使用我的主视图控制器作为表视图的数据源和委托解决了这个问题。希望我几天前就想到了这一点,并为自己节省了很多痛苦! 值得注意的是,如果您最终使用主视图控制器作为数据源/委托,这个答案可以为您节省一些谷歌搜索 - ***.com/a/11068532/953105

以上是关于无法在主视图控制器和弹出视图之间传递消息的主要内容,如果未能解决你的问题,请参考以下文章

使用导航控制器推送和弹出视图控制器:实现

如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]

如何同时关闭和弹出视图控制器

如何在 iOS 13 中查看和弹出视图控制器

如何设置推送和弹出视图控制器流程

在动画推送和弹出时,导航项中带有搜索栏的连续视图控制器会导致视图模糊[重复]