ScrollView中子视图控制器和超级视图控制器之间的通信

Posted

技术标签:

【中文标题】ScrollView中子视图控制器和超级视图控制器之间的通信【英文标题】:Communication between Subview Controller and Superview Controller in a ScrollView 【发布时间】:2013-06-18 21:49:51 【问题描述】:

所以,我有一个带有 UIScrollView 的视图。在这个 ScrollView 中,我添加了一个这样的子视图:

ChildViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"1"];
    [self.scrollView addSubview:controller.view];

这很好用。在这个子控制器中,我定义了一个带有目标自身的按钮:

[button addTarget:self action:@selector(actionButton:) forControlEvents:UIControlEventTouchDown];

如果我点击按钮,程序就会中断。但是如果我将目标设置为 nil,则父控制器被称为第一响应者。

但是,我希望在子控制器中调用该操作。我无法从父视图与子视图通信或从父视图/超级视图调用操作。

我做错了什么?我怎样才能让它工作?

【问题讨论】:

“如果我点击按钮,程序就会中断。”怎么破?编辑您的帖子以包含调试控制台中显示的消息。 您遇到的错误是什么?...您有一个名为 actionButton 的方法吗? 【参考方案1】:

没有更多内容,我的第一个猜测是ChildViewController 被释放,这就是为什么你的应用在点击按钮时崩溃。

因此,解决此问题的一种方法可能是保持对您的 ChildViewController 的强烈引用,例如:

@property (strong) ChildViewController *childViewController

那么你会这样做:

self.childViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"1"];
[self.scrollView addSubview:self.childViewController.view];

但更多信息会有所帮助:)

干杯 莫腾

【讨论】:

你是对的,就是这样!现在一切都说得通了,现在在子控制器中调用了该操作。非常感谢你,你让我开心! :) @schumi 很高兴我能帮上忙,下次一定要包含崩溃消息 :)

以上是关于ScrollView中子视图控制器和超级视图控制器之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

当两者具有相同的超级视图时,根据其他子视图居中子视图

以编程方式在 UIScrollView 中居中子视图

Autolayout - 使超级视图高度等于子视图高度+常量,其中子视图是 textView

处理容器控制器中子视图控制器的 UINavigationItem 更改的最佳实践?

用两个手指使用 UIScrollView 的自定义容器

如何以编程方式控制 Android AbsoluteLayout 中子视图的大小