B_s*_*B_s 15 xcode uiviewcontroller ios swift
几个星期前,我问了这个问题并得到了非常详细的解释.现在我想将数据传递回第一个ViewController,但我仍然使用相同的方法卡住了.我有第一个VC的模态到第二个,我想编辑一个字符串数组,这将再次显示在第一个视图上.所以在我的第一个视图中我有一个数据数组,应该传递给第二个,因此编辑字段显示当前信息,之后用户必须能够编辑数组的内容并将数据传递回第一个它显示在标签上.我正在使用Swift.
我的代码:
(在ViewController.swift中:)
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
let secondVC = segue.destinationViewController as SecondViewController
secondVC.namesPlayers = self.namesPlayers
}
Run Code Online (Sandbox Code Playgroud)
(在SecondViewController.swift :)
override func viewDidLoad() {
super.viewDidLoad()
labelFirstPlayer.text = namenSpelers[0]
}
Run Code Online (Sandbox Code Playgroud)
谢谢
der*_*ida 37
您需要使用委托.这是一个如何在Swift中使用委托的示例.
在第一个ViewController上,在加载第二个VC时设置您的委托:
例如,如果您使用的是Storyboard Editor:
var secondViewController = (segue.destinationViewController.visibleViewController as MySecondViewControllerClass)
secondViewController.delegate = self
Run Code Online (Sandbox Code Playgroud)
编写一个协议并定义一个函数来写回你的值
例如,创建一个名为"Protocol.swift"的文件并编写类似的内容:
protocol writeValueBackDelegate {
func writeValueBack(value: String)
}
Run Code Online (Sandbox Code Playgroud)
将该函数添加到FirstViewController
func writeValueBack(value: String) {
// Or any other function you need to transport data
}
Run Code Online (Sandbox Code Playgroud)
并向您的ViewControllerClass
class ViewController: UIViewController, writeValueBackDelegate
Run Code Online (Sandbox Code Playgroud)
如果尚未实现ViewController
协议文件中定义的所有方法,则上述行将不起作用.
转到第二个视图控制器,并在此处添加委托:
class SecondViewController: ViewController {
// Delegate for FirstViewController
// Declare as weak to avoid memory cycles
weak var delegate: writeValueBackDelegate?
}
Run Code Online (Sandbox Code Playgroud)
在第二个视图控制器上,您现在可以使用它在第一个视图控制器中调用func传递数据.
delegate?.writeValueBack("That is a value")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
21299 次 |
最近记录: |