Делегат, объявленный в подклассе UIView, не будет работать в UIViewController?

78
13

Я пытаюсь создать повторно используемый UIView, который я могу разместить в нескольких UIViewControllers. Я дал ему методы делегирования, чтобы я хотел, чтобы родительские UIViewControllers имели доступ, но он выдает мне ошибку (прокомментирован в коде ниже). Какой лучший способ я могу решить это?

import UIKit

class ViewController: UIViewController {
@IBOutlet weak var cameraView: CameraView!
override func viewDidLoad() {
super.viewDidLoad()
self.cameraView.delegate = self
//ERROR: Cannot assign a value of type 'viewController' to a value of type 'CameraViewDelegate?'
}
}

protocol CameraViewDelegate {
func cameraViewShutterButtonTapped()
func cameraViewimagePickerTapped(imageData: NSData)
}
class CameraView: UIView {
var delegate:CameraViewDelegate?
//Ect...
}

спросил(а) 2021-01-25T12:55:48+03:00 5 месяцев назад
1
Решение
109

Вы не указали, что ViewController соответствует протоколу CameraViewDelegate. Вы должны изменить свой код на это:

class ViewController: UIViewController, CameraViewDelegate {

... в этот момент Xcode будет жаловаться на то, что вы не внедрили cameraViewShutterButtonTapped() и cameraViewimagePickerTapped(), что, по крайней мере, говорит вам, что вы на правильном пути!

Замечание: действительно ли вы хотите, чтобы на экране камеры была ссылка на делегата? Вы можете хотеть, чтобы это было weak.

ответил(а) 2021-01-25T12:55:48+03:00 5 месяцев назад
99

Вам необходимо, чтобы ваш класс ViewController реализовал протокол CameraViewDelegate, например:

class ViewController : UIViewController, CameraViewDelegate { ... }

ответил(а) 2021-01-25T12:55:48+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема