【问题标题】:How do I get the property value from a container view in Swift如何从 Swift 的容器视图中获取属性值
【发布时间】:2017-08-20 12:23:41
【问题描述】:

我有 1 个 UIViewController,其中包含一个 UIContainerView 和一个 UIButton。 另外,我有一个嵌入在 UIViewController 的 UIContainerView 中的 UITableViewController(它有一个 UITextField 和一个 UITextView)。

我正在尝试获取将在 TextField 和 TextView 中可用的字符串值。

我尝试使用 segue 来获取属性值,但我没有这样做,请参阅下面的代码。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "TVCSegue" {
        let containerTVC = segue.destination as? FieldsTVC
        self.textField.text = FieldsTVC?.textField?.text
        self.textView.text = FieldsTVC?.textView?.text
    }
}

上面的代码在 UIViewController 中有 'textField' 和 'textView' 作为属性来分配值。

但我相信它不起作用,因为我在值改变之前就得到了它们。请为我提供一种实用的方法。

【问题讨论】:

  • 分享您的代码,因为 segue 是最简单且可行的方法。
  • 信息太少。您提到了一个 UITableViewController 与另一个带有字段的 UIViewController 相连接,这并没有反映上图。
  • @GiorgioR。我已经用更多细节编辑了这个问题。
  • @KrunalBhavsar 请检查我已编辑的问题。
  • 目前还不清楚,但我至少看到两个问题:1.您分配的值(文本)不是从对象(containerTVC)而是从相关类型(FieldsVC)中检索它们; 2.你是在执行segue之前分配值(即:就在去另一个场景之前),所以即使它们被分配了,你会如何看待它们?

标签: ios swift uicontainerview


【解决方案1】:

当您的主视图加载时,容器 对其分配的初始/根 ViewController 执行 segue。到那时,你可以得到它的引用:

var theFieldsTVC: FieldsTVC?

现在,为 segue 做准备,分配该变量:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "TVCSegue" {

        if let vc = segue.destination as? FieldsTVC {
            theFieldsTVC = vc
        }

    }
}       

那么,你可以:

@IBAction func buttonTapped(_ sender: Any) {

    self.textField.text = theFieldsTVC?.textField?.text
    self.textView.text = theFieldsTVC?.textView?.text

}

【讨论】:

  • @DonMag 如果我在 ContainerView 中有两个 ViewController,父视图加载第一个 ViewController 加载/被调用并显示。是否可以通过分段控制器获取对可以显示的第二个 ViewController 的引用,以便我可以预加载其文本字段值!?
  • 顺便说一句,这不起作用...您应该使用协议或完成处理程序。
  • @FamicTech - 当点击根控制器中的按钮时,OP 询问如何从嵌入在 UIContainerView 中的控制器获取值。在这种情况下,协议/完成处理程序将不适用。我在这里发布了一个完整的工作项目来演示这个解决方案:github.com/DonMag/ContainerValues
猜你喜欢
  • 2015-06-17
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多