【问题标题】:Xcode 4.2 & Storyboard, how to pass data between views? Existing code errorXcode 4.2 & Storyboard,如何在视图之间传递数据?现有代码错误
【发布时间】:2012-03-29 05:53:05
【问题描述】:

我正在尝试学习如何在视图之间传递数据。假设从输入到第一个视图的文本字段中的文本在第二个视图中设置标签。我基本上已经尝试在第二个视图中创建一个字符串,然后当从第一个视图切换到第二个视图时,我在第二个视图中设置了一个字符串。然后,当第二个视图加载时,它会将标签的文本设置为相同的字符串。我 NSLog 在转换之前和之后,在它正常之前,但是当第二个视图加载它时,它的字符串被删除。我不确定为什么这不起作用。这是我的项目:http://www.mediafire.com/?83s88z5d06hhqb5

谢谢!

-Shredder2794

【问题讨论】:

    标签: iphone ipad xcode4.2 storyboard


    【解决方案1】:

    来自我的书 (http://www.apeth.com/iOSBook/ch19.html#_storyboards):

    在执行 segue 之前,会向源视图控制器发送 prepareForSegue:sender:。视图控制器可以通过检查 segue 的标识符和destinationViewController 属性来确定正在触发什么 segue,并且发送者是被点击以触发 segue 的接口对象(或者,如果在代码中调用了 performSegueWithIdentifier:sender:,则无论是什么对象作为sender: 参数提供)。这是源视图控制器和目标视图控制器相遇的时刻;因此,源视图控制器可以在目标视图控制器上执行配置、向其传递数据等等。

    (当然另一种解决方案是“不使用情节提要”。然后第一个视图控制器创建第二个视图控制器,然后可以在那里传递数据。)

    相反的问题要棘手得多;查看 Utility Application 模板,了解如何使用委托模式的示例。

    【讨论】:

      【解决方案2】:

      故事板是现成的东西,您可以在其中减少编写的大量代码。因此请考虑故事板上的控制器 A 和 B。 现在,为了将数据从 A 传递到 B,您可以使用 segue 名称和标识符将它们连接起来,然后您可以将 A 中的委托方法用作:

      //这个方法在从 A 到 B 的转换之前被调用。

      - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
      {
      
          if ([[segue identifier] isEqualToString:@"THE IDENTIFIER YOU NAMED"])
          {
      
              id *objectOfController_B  = [segue destinationViewController];.
              objectOfController_B.lblTextDisplayOfA = //Something...
          }
      }
      

      现在您可以使用控制器 A 中的按钮显式转换它。

      - (IBAction)buttonPressed:(id)sender
      {
          [self performSegueWithIdentifier:@"THE IDENTIFIER YOU NAMED" sender:sender];
      }
      

      所以我想您可以尝试对此进行试验,您将了解 segue 发生转换的方式和时间。

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        似乎有很多事情要解释。我认为通过一些教程可以为您提供所需的答案。见http://www.raywenderlich.com/tutorials

        【讨论】:

          【解决方案4】:

          几周/一个月前,我或多或少地问过同样的问题。有一些非常好的答案,尤其是来自 zoul 的答案,他构建了一个演示项目,向您展示如何创建一个工厂模式应用程序,该应用程序将为视图提供所需的对象。

          我的问题可以在这里找到:iOS: Initialise object at start of application for all controllers to use 并查看“zoul”的答案。它让我解决了这个问题 =)

          祝你试一试好运 =) 塞巴斯蒂安

          【讨论】:

            【解决方案5】:

            我花了“无数个小时”试图找到一种方法来传递数据和理解委托,但没有理解,而且收效甚微。这个视频做了我检查过的所有其他参考资料都没有做的事情:尽可能简单,同时清楚地显示需要什么。非常感谢 Rob Smythe 先生。 http://www.youtube.com/watch?v=XZWT0IV8FrI

            【讨论】:

              【解决方案6】:

              看看这个:http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

              委托模式是实现您想要做的事情的常用方法。

              【讨论】:

                猜你喜欢
                • 2012-12-17
                • 2012-05-09
                • 1970-01-01
                • 2015-12-23
                • 2014-06-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多