我在第二个viewController
上有一个按钮,在按下该按钮后,我想解除第二个viewController
并返回第一个视图控制器并立即调用功能在1st ViewController
swift文件中编码。
我可以知道我该怎么办?通过segue?
答案 0 :(得分:2)
有很多种方法可以使用#<Person:0x007fa40c04cd08>
#<Person:0x007fa40c04c920>
#<Person:0x007fa40c04c5d8>
#<Person:0x007fa40c04c5b0>
和protocol
。
您可以在delegate
中创建一个protocol
并扩展该协议。现在,在ViewController1
中创建delegate
协议,并在ViewController2
ViewController1's
方法中传递该代理的引用。
首先创建一个这样的协议
prepareForSegue
现在在此protocol PassdataDelegate {
func passData()
}
中扩展此协议,并在ViewController1
方法
prepareForSegue
现在在class ViewController1 : UIViewController, PassdataDelegate {
func passData() {
//Here call your function
self.callMyFunction()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier == "SegueIdentifier") {
let destVC = segue.destinationViewController as! ViewController2
destVC.delegate = self
}
}
}
中创建protocol
的委托对象,就像这样
ViewController2
注意: - 我在这里传递class ViewController2 : UIViewController {
var delegate: PassdataDelegate?
//Now call the method of this delegate in Button action
@IBAction func buttonClick(sender: UIButton) {
self.delegate.passData()
//Now dismiss the controller
}
}
,但您可以传递您在string
方法中声明的任何类型的对象。
答案 1 :(得分:1)
您可以参考unwind segue
。
class ViewController1 {
@IBAction func doSomeStuffAfterReload(segue: UIStoryboardSegue) {
// do whatever you need to do here.
}
}
在情节提要板上,从ViewController2按Ctrl +从button
拖动到exit outlet
并选择doSomeStuffAfterReload
。
您可以在此处看到它:https://spin.atomicobject.com/2014/10/25/ios-unwind-segues/ 快乐的编码^^