【发布时间】:2015-12-31 17:49:21
【问题描述】:
我读过Trying to understand protocol/delegates in Swift、Passing data back from view controllers Xcode 和Pass data when dismiss modal viewController in swift,试图来回传递一些数据。我想我完全按照帖子中的描述做了,数据没有被传递。我错过了一些东西,我不知道是什么。如果你能指出那是什么,那就太棒了。提前谢谢你:)
我还应该提到,我使用模态 segue 呈现了TaskMessageViewController。我想将数据发送回我的TaskListViewController。我目前正在使用unwindToSegue 回到TaskListViewController。
在我的Protocols.swift 文件中,我有以下代码:
import Foundation
protocol ReceiveMessageDelegate {
func receiveMessageFromTaskMessageViewController (message: String)
}
在我的继承声明中,我有:
class TaskListViewController: UIViewController, ReceiveMessageDelegate
在我的TaskListViewController.swift 中,我写道:
override func viewDidLoad() {
super.viewDidLoad()
let taskMessageViewController = TaskMessageViewController()
taskMessageViewController.delegate = self
}
func receiveMessageFromTaskMessageViewController (message: String) {
print(message)
print("Protocol works!")
}
在我的TaskMessageViewController.swift 中,我写道:
var delegate: ReceiveMessageDelegate?
@IBAction func doneButtonTapped(sender: AnyObject) {
self.delegate?.receiveMessageFromTaskMessageViewController("message from message View Controller")
}
当我按下模拟器上的done 按钮时,doneButtonTapped 会被执行。但是,print("Protocol Works") 永远不会被执行。有人有什么建议吗?
【问题讨论】:
-
如何以模态方式呈现视图控制器?如果是通过segue,则需要拦截segue的destinationViewController,将其转换为TaskMessageViewController,并在该对象上设置委托
-
我已经使用 segue 以模态方式呈现了视图控制器。但问题是我使用
unwindToSegue摆脱了模态视图,我试图将数据从模态视图传递回我的视图控制器。