在两个已加载的视图控制器之间传递图像

时间:2016-11-11 01:32:05

标签: ios iphone swift uiscrollview

这可能是微不足道的,但我是Swift的新手并希望得到任何帮助。

应用程序旨在修改图像。

我有3个ViewControllers:

  • 包含UIScrollView
    • 操作 - 对图像(包含在UIScrollView中)
    • 执行所有操作
    • 预览 - 图像预览(包含在UIScrollView中)

我想将UIImage从Action移动到预览。

所有视图控制器都已打开。操作和预览是UIScrollView的并排子项。我不想再打开它们或自动移动它们。我只想在Action中完成修改后更新预览中的图像。

我正在使用Swift 3.0和Xcode 8。

Interface Builder Layout Image

1 个答案:

答案 0 :(得分:0)

通常一次只能看到一个viewController,所以假设是这种情况,它们之间通信的典型方式是目标上的属性,通常这是通过单独的协议完成的。例如,

protocol CanDisplayImage {
    var imageToDisplay: UIImage? { get; set; }
}

然后你的目标viewController将实现这个协议:

class MyPreviewController: UIViewController, CanDisplayImage {
    var imageToDisplay: UIImage?
    func viewDidLoad() {
        theImageView.image = imageToDisplay
    }
}

然后你的源viewController导致segue到目的地,并在其

中设置这个属性
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let dest = segue.destination as? CanDisplayImage {
        dest.imageToDisplay = theImageToPreview
    }
}

你如何选择使segue可以在不同的方式中完成。最常见的是从按钮或源viewController中的任何内容按住Ctrl键拖动到目标viewController中的任何位置。

请注意,我没有检查上面的代码实际编译,所以我可能会有一些拼写错误。