我正试图通过委派和协议将我的collectionViewCell imageView中的图像发送到另一个VC中的imageView。我不明白为什么这个不能正常工作?
发送VC为:TrainersViewController
接收VC为:BioViewController
这是我的协议:
protocol TrainersViewControllerDelegate: class {
func trainersViewController(controller: TrainersViewController, didFinishSendingImage trainer:TrainerArray)
}
class TrainersViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, AddNewTrainerViewControllerDelegate {
weak var delegate: TrainersViewControllerDelegate?
}
这是我的接收类:
class BioViewController: UIViewController, TrainersViewControllerDelegate {
@IBAction func backToTrainersButton(sender: AnyObject) {
dismissViewControllerAnimated(true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
}
@IBOutlet weak var bioImage: UIImageView!
func trainersViewController(controller: TrainersViewController, didFinishSendingImage trainer: TrainerArray) {
trainer.trainerImage! = bioImage as! UIImage
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "bioSegue" {
let navigationController = segue.destinationViewController as! UINavigationController
let controller = navigationController.topViewController as! TrainersViewController
controller.delegate = self
}
}
}
最后,这里是集合ViewCell中的按钮,我正在调用它来实现这一点:
@IBAction func bioSegueButton(sender: AnyObject) {
let index = sender.tag
let trainer = trainers[index]
print(trainer.name)
delegate?.trainersViewController(self, didFinishSendingImage: trainer)
performSegueWithIdentifier("bioSegue", sender: self)
}
为什么不将我的图像发送到另一个VC的imageView
当您调用时
delegate?.trainersViewController(self, didFinishSendingImage: trainer)
变量CCD_ 3尚未被设置。您可以使用以下行进行检查:
print(delegate)
如果未设置委托,则此行将打印nil
您只需在prepareForSegue
中传递图像,这将是最简单的方法(但您必须在sending
类中实现它)。前面的答案是正确的。您可以在设置委托之前使用它。如果你真的想使用它,我会首先执行segue,在准备时设置委托,然后尝试使用委托方法。
@IBAction func bioSegueButton(sender: AnyObject) {
let index = sender.tag
let trainer = trainers[index]
print(trainer.name)
performSegueWithIdentifier("bioSegue", sender: self)
delegate?.trainersViewController(self, didFinishSendingImage: trainer)
}
这可能会导致另一个问题,但这与授权无关:)
你可以试着改变你的授权。在BioViewController
中,使用方法bioViewControllerSetUpImage(bioViewController: BioViewController) -> UIImage
使BioViewControllerDelegate
在发送类中实现它,并在BioViewController类中调用它,例如在viewDidLoad
中,如bioImage = delegate?.bioViewControllerSetUpImage(self)
。然后创建BioViewController
,设置delegate,segue。(但这是我的尝试,可以忽略它)