【问题标题】:Two UIviewControllers inside UIScrollview - how to call methods between themUIScrollview 中的两个 UIviewControllers - 如何在它们之间调用方法
【发布时间】: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"]];

标签: ios objective-c uiviewcontroller uiscrollview


【解决方案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 实例,则将其设为单例。通过制作类初始化方法。这样您就可以从您的称谓中的任何位置创建/获取对象的当前实例。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多