我有两种观点:
使用" Send"委派视图按下时按钮通过委托调用sendMessage
使用标签接收视图。收到sendMessage后,标签应该更改。
出于某种原因,我无法让他们联系"。我怀疑它与接收者委托的设置方式有关(通常情况下,发件人的委托是nil,就像在这种情况下一样)。但是把它放在哪里?我已经在网络,书籍等网站上搜索了这个答案,虽然偶尔会有人问这个问题但却从未回答过。我在这里缺少什么?
似乎与" receiver.delegate = self"有关。线。
以下是两个UIViews:
发送:
import UIKit
protocol DelegatingViewDelegate {
func sendMessage()
}
class DelegatingView: UIView {
var delegate: DelegatingViewDelegate?
init() {
super.init(frame: CGRect(x: 0, y: 0, width: 200, height: 100))
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
@IBOutlet weak var delegatingLabel :UILabel?
@IBAction func sendButton(sender: AnyObject) {
print(delegate)
delegate?.sendMessage()
print("Sending message")
}
}
接收:
import UIKit
class ReceivingView: UIView, DelegatingViewDelegate {
var receiver = DelegatingView()
init() {
super.init(frame: CGRect(x: 0, y: 0, width: 200, height: 100))
receiver.delegate = self
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
}
override func awakeFromNib() {
//
}
@IBOutlet weak var receiveingLabel :UILabel?
func sendMessage() {
receiveingLabel?.text = "GOT IT"
print("Received message")
}
}
答案 0 :(得分:0)
参见Paulw11的评论。我试图打破MVC并且Xcode正在反击。
所以解决方案是通过视图控制器并放置一些代码,如:
class ViewController: UIViewController, DelegatingViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
delegatingView.delegate = self
}
@IBOutlet weak var delegatingView: DelegatingView!
在视图控制器中。请注意,在上面的代码片段中,delegatingView已被设置为插座,我可以通过它设置文本标签。