Swift-UIView委托协议未返回值

时间:2018-11-01 00:41:35

标签: ios swift delegates protocols color-picker

我正在尝试从以下问题中应用颜色选择器。

Simple swift color picker popover (iOS)

我设置的方式是将颜色选择器类附加到主视图控制器中的UIView上。 Michael Ros编写的代码有效,但是当我尝试使用主视图控制器访问它时,什么都没有发生。下面是我在视图控制器中使用的代码。它是否正确?我已经解决了其他问题,但不确定自己做错了什么。

class ViewController: UIViewController {
  weak var colorPickerDelegate: ColorPickerDelegate?

override func viewDidLoad() {
    super.viewDidLoad()
    self.colorPickerDelegate = self
    } 
  }
}

extension ViewController: colorPickerDelegate {
func colorChanged(color: UIColor) {
   print(color)
  }
}

可以在附加的问题上找到颜色选择器代码,因为我不确定是否允许复制代码。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您应该订阅UIView并将其分配给视图控制器视图,然后将ColorPickerView的委托设置为视图控制器:

ColorPickerView.swift

class ColorPickerView : UIView {

weak var delegate: ColorPickerDelegate?
// Other code from Michael Ros's adaptation.
}

ViewController.swift

import UIKit

class ViewController: UIViewController {

    lazy var colorPickerView = ColorPickerView(frame: CGRect(origin: .zero, size: CGSize(width: self.view.frame.width, height: 300)))

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .white

        self.colorPickerView.delegate = self

        self.view.addSubview(colorPickerView)

    }


}

extension ViewController: ColorPickerDelegate {
    func colorDidChange(color: UIColor) {
        print(color)
    }
}

View Hierarchy and Debug output

答案 1 :(得分:0)

您应该更换 colorChanged -> colorDidChange ! 如果您委托的是ColorPickerDelegate;我想是