【问题标题】:Swift - UIView Delegate Protocol not returning valueSwift - UIView 委托协议不返回值
【发布时间】:2019-04-05 05:36:14
【问题描述】:

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

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)
  }
}

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

感谢您的帮助

【问题讨论】:

    标签: ios swift delegates protocols color-picker


    【解决方案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)
        }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 抱歉打错了
      猜你喜欢
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多