UIScrollview 中的两个 UIviewControllers - 如何在它们之间调用方法

Posted

技术标签:

【中文标题】UIScrollview 中的两个 UIviewControllers - 如何在它们之间调用方法【英文标题】:Two UIviewControllers inside UIScrollview - how to call methods between them 【发布时间】:2014-04-21 21:21:03 【问题描述】:

我在从一个UIViewController 调用另一个UIViewController 的方法时遇到问题。 目前我有两个UIViewControllersUIScroll 视图。 我想在第二个中更改一些内容并在第一个中查看结果。

我尝试这样做:

第二个UIViewController的内部函数:

-(void)doSomething:()

    FirsOneViewController *firstVC = [FirsOneViewController alloc] init];
    [firstVC changeUnits:0];

函数被调用,但我在第一个控制器中没有看到任何变化。

BR, 保罗

【问题讨论】:

那是因为你重新创建了你的第一个 vc 而不是持有他的弱属性... 你在使用故事板吗?? 是的。[self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"VCone"]]; [self addChildViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"VCtwo"]]; 【参考方案1】:

从您的代码中,我看到您创建了 FirstViewController 的新实例,因此滚动视图中的当前实例没有理由收到此消息。

您需要将 changeUnits: 消息发送到当前的 FirstViewController,因此您需要对它的引用。为此,您可能需要考虑创建一个协议,以便您的父容器(滚动视图)由 SecondViewController 通知,然后通知 FirstViewController。一个更简单(更懒惰)的解决方案是让 SecondViewController 对 FirstViewController 有一个强引用(尽管这个解决方案将来可能会咬你)。

【讨论】:

你能给我提供任何如何做到这一点的教程吗?你是说代表? 是的,我的意思是使用委托模式,这取决于您对 ios(以及 Objective C 的新用户)的了解程度,这可能对您有用,也可能对您没有用 raywenderlich.com/46988/ios-design-patterns【参考方案2】:

正如在其他答案中所说,您正在创建 FirsOneViewController 的新实例,而不是引用您已有的实例。

这里有三种方法可以满足您的要求:

代表团: FirstViewController 应该是 SecondViewController 的委托(因为 secondViewController 正在调用 FirstViewController 上的方法)。您应该告诉 SecondViewController,FirstViewController 是它的委托,无论哪个类初始化两个 viewController。

从你目前所说的来看,这似乎是你最好的选择。

NSNotification: 如果您认为多个对象想要监听 SecondViewController 中的变化,这可能是一个不错的选择。只需在 SecondViewController 中发布 NSNotification 并在 FirstViewController 中添加 NSNotification 侦听器

单例: 如果只存在一个 FirstViewController 实例,则将其设为单例。通过制作类初始化方法。这样您就可以从您的称谓中的任何位置创建/获取对象的当前实例。

希望这会有所帮助。

【讨论】:

以上是关于UIScrollview 中的两个 UIviewControllers - 如何在它们之间调用方法的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollview 中的两个 UIviewControllers - 如何在它们之间调用方法

更改 UIScrollView 中的比例因子

获取嵌套在 UIScrollView 中的 UIImageView 中两个 CGPoints 之间的距离

iOS中的UIScrollView不响应滚动到顶部

UIView 不遵守 UIScrollView 中的自动布局约束

UIScrollView 中的 UITextView 使用自动布局