在UIViews之间委派 - 在哪里放置接收者的代表?

时间:2016-02-19 19:47:50

标签: ios swift uiview delegates

我有两种观点:

  1. 使用" Send"委派视图按下时按钮通过委托调用sendMessage

  2. 使用标签接收视图。收到sendMessage后,标签应该更改。

  3. 出于某种原因,我无法让他们联系"。我怀疑它与接收者委托的设置方式有关(通常情况下,发件人的委托是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")
    }
    
    }
    

1 个答案:

答案 0 :(得分:0)

参见Paulw11的评论。我试图打破MVC并且Xcode正在反击。

所以解决方案是通过视图控制器并放置一些代码,如:

class ViewController: UIViewController, DelegatingViewDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

    delegatingView.delegate = self

}

@IBOutlet weak var delegatingView: DelegatingView!

在视图控制器中。请注意,在上面的代码片段中,delegatingView已被设置为插座,我可以通过它设置文本标签。