【问题标题】:Using storyboard unwinds, how do I take data from the view controller I'm returning from and use it in the view controller I returned to?使用情节提要展开,我如何从要返回的视图控制器中获取数据并在返回的视图控制器中使用它?
【发布时间】:2013-03-10 05:39:29
【问题描述】:

我已经实现了一切,当我返回到源视图控制器时会触发以下方法:

- (IBAction)returned:(UIStoryboardSegue *)segue {
    ...
}

我想从要返回的视图中的 UITextField 中获取值,并将源视图(或调用此方法的视图)中的值设置为该 UITextField 的值。

我试过了:

- (IBAction)returned:(UIStoryboardSegue *)segue {
    AddTextViewController *returnedFromViewController = segue.destinationViewController;
    NSString *inputtedText = returnedFromViewController.textField.text;
    self.foo = inputtedText;
}

但我得到这个错误:

[RootViewController textField]: unrecognized selector sent to instance 0x8dc0250
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[RootViewController textField]: unrecognized selector sent to instance 0x8dc0250'

我在上面的代码中做错了什么?几乎没有这方面的任何文档,所以我自己很难搜索。

【问题讨论】:

    标签: ios objective-c xcode uistoryboard uistoryboardsegue


    【解决方案1】:

    您使用了错误的控制器。你想要segue 的sourceViewController,而不是destinationViewController。否则,你做的都是正确的。

    【讨论】:

      【解决方案2】:

      最好的方法是实现一个协议/委托。委托将处理来自您的目标视图控制器的任何请求,并将数据发送回您的源视图控制器。

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

      【讨论】:

      • 为什么这比内置的方法更好?
      • 委托是处理此类操作的首选方式。并非所有东西都使用segue。如果不清楚,了解代表的正确用法是一件非常好的事情。浏览几个例子,它们看起来并不像第一眼看上去那么复杂。 theappcodeblog.com/2011/04/15/…
      • 在这种情况下使用展开转场没有什么问题。 Delegates 也可以,但在某些情况下,unwind segues 甚至可以成为更清洁的解决方案。
      • 并不是说使用source/dest有什么问题。这是一个简单的事实,他说“(或调用此方法的视图)”。在这种情况下,源视图控制器可能不是 segues 视图。学习代理的正确用法和 segues 涵盖了这两种情况。
      猜你喜欢
      • 1970-01-01
      • 2014-09-12
      • 2013-10-21
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 2014-02-17
      • 1970-01-01
      相关资源
      最近更新 更多