UIScrollview 中的两个 UIviewControllers - 如何在它们之间调用方法
Posted
技术标签:
【中文标题】UIScrollview 中的两个 UIviewControllers - 如何在它们之间调用方法【英文标题】:Two UIviewControllers inside UIScrollview - how to call methods between them 【发布时间】:2014-04-21 21:21:03 【问题描述】:我在从一个UIViewController
调用另一个UIViewController
的方法时遇到问题。
目前我有两个UIViewControllers
的UIScroll
视图。
我想在第二个中更改一些内容并在第一个中查看结果。
我尝试这样做:
第二个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 中的 UIImageView 中两个 CGPoints 之间的距离