【问题标题】:How to pass information back with view controllers如何使用视图控制器传回信息
【发布时间】:2016-08-02 15:06:26
【问题描述】:

我有一个视图控制器和一个表视图控制器。我从 VC One 转到 VCTable。在 VCTable 上,我从存储在值中的类型字符串中选择一个(单元格)数据。当我按下一个单元格时,我想将该数据发送回 VC One。 并显示在按钮或标签中。

如何使用 Storyboards 做到这一点?

【问题讨论】:

  • 你如何展示VC二?来自VC一号? VC二是VCTable的意思吗?
  • 对不起,是的。来自 VC One
  • 好吧,我教你一些简单的方法:)
  • 是的。 VCtable 是我选择一个城市并在 VC 中显示的 json API:D
  • 请检查我的回答。

标签: ios swift uitableview uiviewcontroller uistoryboard


【解决方案1】:
【解决方案2】:

第一个解决方案:使用回调

在您的 VCOne 中:

@IBAction func goToViewController2(sender: AnyObject) {
        let vc2 = storyboard?.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2
        vc2.callback = ({ string in
            self.myString = string
        })
        presentViewController(vc2, animated: true, completion: nil)
    }

在您的 VCTable 中:

创建一个回调变量:

var callback: ((String) -> Void)?

在您的 didSelectRowAtIndexPath 方法中,通过以下方式将其发送给 VCOne:

callback?(textField.text!)

第二种解决方案:使用参考

@IBAction func goToViewController2(sender: AnyObject) {
        let vc2 = storyboard?.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2
        vc2.vc1 = self
        presentViewController(vc2, animated: true, completion: nil)
    }

在您的 VCTable 中:

创建这个变量:

var vc1: ViewController?

在您的 didSelectRowAtIndexPath 方法中,通过以下方式将其发送给 VCOne:

vc1?.myString = textField.text!

第三种解决方案:使用 Delegate 请参阅 @Andre Slotta 所说的链接。

FourthSolution:使用 CenterNotification 谷歌搜索 :)。

希望有帮助:)

【讨论】:

  • 您认为哪种方式更好?
  • 这里没有更好的办法,如果你觉得方便的话可以选择一个。
猜你喜欢
  • 2023-03-19
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多