Swift - UIView Делегатский протокол не возвращает значение - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь применить палитру цветов из вопроса ниже.

Простой быстрый выбор цвета всплывающего окна (iOS)

То, как я это настроил, было связано с тем, что класс палитры цветов присоединен к UIView в контроллере основного вида. Код Майкла Роса работает, но когда я пытаюсь получить к нему доступ с помощью контроллера основного вида, ничего не происходит. Ниже приведен код, который я использую в своем контроллере представления. Это правильно? Я перебрал другие вопросы и не уверен, что делаю не так.

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 голосов
/ 01 ноября 2018

Вы должны передать подкласс 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

0 голосов
/ 01 ноября 2018

вы должны заменить colorChanged -> colorDidChange ! если вы делегируете это ColorPickerDelegate; Я так думаю

...