Позволяет пользователю выбрать изображение из камеры, фото библиотеки или фотоальбомов и нажать ошибку, которую я не могу решить - PullRequest
0 голосов
/ 29 апреля 2020

Я слежу за видео Дэвида Торна, чтобы пользователи могли делать снимки с помощью камеры или импортировать их из своей фото-библиотеки или фотоальбомов.

https://www.youtube.com/watch?v=wDzk5KDe6Uw

Я следовал за гидом за символом, и меня поразили ошибки на изображении ниже. Я сравнил свой код с кодом в Github для учебника, и я не могу найти разрешение.

Вот снимок экрана с ошибками (недостаточно репутации для вставки в сообщение)

Ошибки

1! Значение типа ViewController не имеет члена selectedImage

2! nil нельзя присвоить типу '(UIImagePickerController, [UIImagePickerController.InfoKey: Any]) -> ()'

2! 'nil' нельзя назначить типу '(UIImagePickerController, [UIImagePickerController.InfoKey: Any]) -> ()'

.swift-файл имеет тип UIViewController.

Вот мой код вошел;

public var imagePickerController: UIImagePickerController?

public var defaultImageUrl: URL?

   internal var selectedImage: UIImage? {
       get {
           return self.selectedImageView.image
       }

       set {
           switch newValue {
           case nil:
               self.selectedImageView.image = nil
               self.selectImageButton.isEnabled = true
               self.selectImageButton.alpha = 1

               self.removeImageButton.isEnabled = false
               self.removeImageButton.alpha = 0.5
           default:
               self.selectedImageView.image = newValue
               self.selectImageButton.isEnabled = false
               self.selectImageButton.alpha = 0.5

               self.removeImageButton.isEnabled = true
               self.removeImageButton.alpha = 1
           }
       }
   }
//This outlet, 'selectedImageContainer' was guessed from observing the tutorial stacked their UIImageView in a UIView.

@IBOutlet weak var selectedImageContainer: UIView!
@IBOutlet weak var selectedImageView: UIImageView!


@IBOutlet weak var selectImageButton: UIButton! {
    didSet {
        guard let button = self.selectImageButton else { return }
        button.isEnabled = true
        button.alpha = 1
    }
}

@IBOutlet weak var removeImageButton: UIButton! {
    didSet {
        guard let button = self.removeImageButton else { return }
        button.isEnabled = false
        button.alpha = 0.5
    }

override func viewDidLoad() {
super.viewDidLoad()
self.selectedImageView.contentMode = .scaleAspectFit
self.selectImageButton.isEnabled = self.selectedImage == nil
self.selectImageButton.alpha = 1

}


@IBAction func selectImageButtonAction(_ sender: Any) {


    if self.imagePickerController != nil {
        self.imagePickerController?.delegate = nil
        self.imagePickerController = nil
    }
    self.imagePickerController = UIImagePickerController.init()

    let alert = UIAlertController.init(title: "Select Source Type", message: nil, preferredStyle: .actionSheet)

    if UIImagePickerController.isSourceTypeAvailable(.camera) {
        alert.addAction(UIAlertAction.init(title: "Camera", style: .default, handler: { (_) in
            self.presentImagePicker(controller: self.imagePickerController!, source: .camera)
        }))
    }

    if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
        alert.addAction(UIAlertAction.init(title: "Photo Library", style: .default, handler: { (_) in
            self.presentImagePicker(controller: self.imagePickerController!, source: .photoLibrary)
        }))
    }

    if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) {
        alert.addAction(UIAlertAction.init(title: "Saved Albums", style: .default, handler: { (_) in
            self.presentImagePicker(controller: self.imagePickerController!, source: .savedPhotosAlbum)
        }))
    }

    alert.addAction(UIAlertAction.init(title: "Cancel", style: .cancel))

    self.present(alert, animated: true)
}

internal func presentImagePicker(controller: UIImagePickerController , source: UIImagePickerController.SourceType) {
    controller.delegate = self
    controller.sourceType = source
    self.present (controller, animated: true)
}

@IBAction func removeImageButtonAction(_ sender: UIButton) {
    self.selectedImage = nil
}


}

extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    guard let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else {
        return self.imagePickerControllerDidCancel(picker)
    }

    self.selectedImage = image

    picker.dismiss(animated: true) {
        picker.delegate = nil
        self.imagePickerController = nil
    }
}

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
     picker.dismiss(animated: true) {
        picker.delegate = nil
        self.imagePickerController = nil
    }
}
}

1 Ответ

0 голосов
/ 29 апреля 2020

Я ответил на свой вопрос!

класс расширения ViewController был назван неправильно. Мой .swift файл был назван как-то иначе.

Я также переместил UIImageViewControllerDelegate и UINavigatonControllerDeletage из исходного класса вверху кода, чтобы он появился только в расширении!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...