【问题标题】:Update external XIB objects programmatically in Swift在 Swift 中以编程方式更新外部 XIB 对象
【发布时间】:2016-08-06 15:44:22
【问题描述】:

我加载了两个通过滑动手势访问的 XIB 视图,并希望从我的第一个 XIB 更新我的第二个 XIB 的文本框。

这是我到目前为止的快速代码,但它似乎无法从一个视图到另一个视图:

// This code is placed in ViewController0.xib
let vc1 = ViewController1(nibName: "ViewController1", bundle: nil)
vc1.resultsTextBox?.text = "test"        
// vc1.asd(1) //Tried calling a function that's in that view but it didn't work either.

【问题讨论】:

  • 这段代码创建了一个新的vc1实例。您需要获取对已加载的 vc1 实例的引用,这可能是通过您的根视图控制器进行的,该控制器是漫画在加载 vc1 时在 vc0 上设置属性

标签: ios swift storyboard xib viewcontroller


【解决方案1】:

如果 resultsTextBox 是 UITextField,那么它可能尚未初始化。这是在 viewDidLoad 中完成的。更好的策略是将一些字符串变量设置为“test”。然后在viewDidLoad中,设置resultsTextBox.text

let vc1 = ViewController1(nibName: "ViewController1", bundle: nil)
vc1.textBoxStr = "test"


override func viewDidLoad() {
  super.viewDidLoad()
  vc1.resultsTextBox?.text = textBoxStr
  ...
}

希望这是有道理的。

【讨论】:

  • 不走运。 :-( 我的应用程序最初已经加载了 ViewController0 和 ViewController1 并允许我在两者之间滑动,所以我假设 ViewController1 中的 UITextField 已经初始化,因为我可以看到初始文本。但是,当我从 viewController0 进行更新时,使用我在上面包含的代码,没有进行更新。只有对 UITextField 的更新从 ViewController1 成功。
  • 我明白你的意思。使用上面的代码,您将在 ViewController2 中创建一个全新的 ViewController1,除非我仍然缺少某些东西。如果您允许在两个 VC 之间滑动,则每个 VC 都应该有另一个的句柄,一旦实例化 VC。让 vc1 = ... 然后 vc1.otherVC = vc2。然后同样适用于 vc2。这有意义吗?
  • 啊,现在这很有意义,因为我一直在创建新实例。我已经尝试按照您的建议进行操作,但是在四处寻找类似的替代方案时却失败了。我已经发布了一个问题,其中我的视图连接到滑动的代码:stackoverflow.com/questions/36509356/…
猜你喜欢
  • 2015-07-27
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多