Я прошел через несколько примеров передачи данных между контроллерами представления, используя метод подготовки к segue, а также методы протокола / делегата ... безрезультатно, я все еще застрял в своем проекте и мог бы использовать некоторую помощь.
Я пытаюсь 1) выбрать изображение из VC1, 2) отредактировать изображение в VC2 и 3) передать отредактированное изображение обратно в VC1 и отобразить его.
Я застрял на части возврата и отображения .. вся помощь очень ценится!
У меня есть HomeViewController (VC1), из которого я использую UIImagePicker, чтобы выбрать изображение, а затем просмотреть/ отредактируйте это изображение на другом контроллере представления (VC2), который я помещаю в стек в didFinishPicking ... как показано ниже:
extension HomeViewController : UIImagePickerControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
let selectImageandCaptionVC = storyboard?.instantiateViewController(withIdentifier: "SelectImageandCaption") as? SelectImageandCaption
selectImageandCaptionVC?.image = image
picker.pushViewController(selectImageandCaptionVC!, animated: true)
}
}
}
В VC2 я редактирую изображение, затем пытаюсь передать обратноотредактированное изображение, и отобразите его на VC1.Вот мой код на VC2:
import UIKit
// protocol used for sending data back to HomeViewController
protocol ImageAndCaptionDelegate: class {
func userDidEnterInformation(image: UIImage)
}
class SelectImageandCaption: UIViewController, UIScrollViewDelegate {
weak var delegate: ImageAndCaptionDelegate? = nil
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var imageHeight: NSLayoutConstraint!
@IBOutlet weak var imageWidth: NSLayoutConstraint!
var image : UIImage = UIImage()
override func viewDidLoad() {
super.viewDidLoad()
scrollView.delegate = self
imageView.image = image
}
@IBAction func doneButtonPressed(_ sender: Any) {
//Code that edits image
let croppedImage = UIImage(cgImage: croppedCGImage!)
//Pass image pack to HomeViewController
delegate?.userDidEnterInformation(image: croppedImage)
// Attempts to go back to the previous view controller and show croppedImage...
//let HomeViewController = storyboard?.instantiateViewController(withIdentifier: "HomeViewController") as? HomeViewController
//self.navigationController?.pushViewController(HomeViewController!, animated: true)
//self.navigationController?.popToViewController(HomeViewController!, animated: true)
//present(HomeViewController!, animated: true, completion: nil)
self.dismiss(animated: true, completion: nil)
}
}
Назад на VC1 Вот мой код для обрезанного изображения, которое будет возвращено
class HomeViewController: UIViewController, ImageAndCaptionDelegate {
var image : UIImage = UIImage()
var video : AVAsset?
@IBOutlet weak var step1Image: UIImageView!
@IBOutlet weak var step1ProgressImage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
}
func userDidEnterInformation(image: UIImage) {
self.step1Image.image = image
}
Заранее спасибо за вашу помощь!