アクションボタンを介して「CollectionViewController」を表示するviewControllerがあります。
@objc func addPhoto() {
let layout = UICollectionViewFlowLayout()
let photoController = UINavigationController(rootViewController: PhotoController(collectionViewLayout: layout))
present(photoController, animated: true, completion: nil)
}
「PhotoController」内で、標準のプロトコル手順を使用して、このコントローラーから元のviewControllerにデータを戻そうとしています。
protocol PhotoControllerDelegate {
func store(image: UIImage)
}
var delegate: PhotoControllerDelegate?
@objc func handleSave() {
if let image = headerImage {
delegate?.store(image: image)
}
///Dimiss viewController
dismiss(animated: true, completion: nil)
}
元のviewController内に戻って、却下されたPhotoControllerを再インスタンス化しました。
let photoController = PhotoController()
そして、viewDidLoad()内でデリゲートを割り当てました
photoController.delegate = self
次に、元のviewController内にデリゲートメソッドを提供しました。
func store(image: UIImage) {
selectedPhotoImage.image = image
}
問題は、このメソッドが呼び出されていないことです。私は通常問題はありませんが、これは私を困惑させました。
どんな助けでも素晴らしいでしょう。
PS私のviewControllersには余分なジャンクがたくさんあるので、完全なコードを投稿できませんでした。
その中でイベントを受信するように追加delegate
しself
てくださいprotocol
viewController
@objc func addPhoto() {
let layout = UICollectionViewFlowLayout()
let objVC = PhotoController(collectionViewLayout: layout)
objVC.delegate = self
let photoController = UINavigationController(rootViewController: objVC)
present(photoController, animated: true, completion: nil)
}
delegate
同じを追加することを忘れないでくださいviewController
。extension
クリーンなコードにするために使用します。
extension SourceController: PhotoControllerDelegate {
func store(image: UIImage) {
selectedPhotoImage.image = image
}
}
protocol
以下のように定義しますPhotoController
public protocol PhotoControllerDelegate {
func store(image: UIImage)
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加