【问题标题】:Pass an image between two already loaded view controllers在两个已加载的视图控制器之间传递图像
【发布时间】:2016-11-11 01:32:05
【问题描述】:

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

应用旨在修改图像。

我有 3 个视图控制器:

  • 包含 UIScrollView
    • 动作 - 所有动作都对图像进行(包含在 UIScrollView 中)
    • 预览 - 图像预览(包含在 UIScrollView 中)

我想将 UIImage 从 Action 移动到 Preview。

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

我正在使用 Swift 3.0 和 Xcode 8。

【问题讨论】:

  • 如果我理解错了你的问题,请纠正我,动作和预览是两个视图控制器,你在预览控制器中预览你的图像,预览后你想将图像移动到动作视图控制器。这就是你想要的吗?
  • 一张您当前 IB 设计的图片可能有助于了解您的需求。
  • 有2种方法可以使用prepare for segue将图像传递给viewcontroller。或者您可以使用单例类来保存图像。
  • @michael 我已附上我的 IB 设计供您查看。
  • @Janmenjaya 我想从动作-> 预览中移动我的图像。但我假设无论哪种方式,过程都是相同的。

标签: ios iphone swift uiscrollview


【解决方案1】:

通常一次只有一个 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
    }
}

您选择如何引起转场可以通过不同的方式完成。最常见的方法是从源 viewController 中的按钮或其他任何地方按住 ctrl 并拖动到目标 viewController 中的任何位置。

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

【讨论】:

    猜你喜欢
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多