我试图将用户上传的图像从一个 UIImageView 移动到另一个View Controller上的另一个 UIImageView 。我可以让用户上传图片并将其保存在第一个 UIImageView 中,但在他们按下" Post"按钮,下一个视图控制器上的UIImageView保持空白。
注意:browsingImage是第二个视图控制器(目标UIImageView)上UIImageView的名称
非常感谢任何帮助!
@IBAction func cameraButton(sender: AnyObject) {
addNewPicture()
}
func addNewPicture() {
let picker = UIImagePickerController()
picker.allowsEditing = true
picker.delegate = self
presentViewController(picker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
postingImage.image = image
self.dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func postButton(sender: AnyObject) {
performSegueWithIdentifier("toBrowsePage", sender: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "toBrowsePage" {
var itemToAdd = segue.destinationViewController as! ListPage
itemToAdd.postingImage.image = browsingImage.image
}
}
答案 0 :(得分:24)
在prepare(for:)
中,您无法访问目标视图控制器的@IBOutlet
,因为它们尚未设置。您应该将图像分配给目标视图控制器的属性,然后将其移动到viewDidLoad()
中的位置:
在源视图控制器中:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "toBrowsePage" {
let dvc = segue.destination as! ListPage
dvc.newImage = postingImage.image
}
}
在目标视图控制器中:
class ListPage: UIViewController {
@IBOutlet weak var browsingImage: UIImageView!
var newImage: UIImage!
override func viewDidLoad() {
super.viewDidLoad()
browsingImage.image = newImage
}
}
答案 1 :(得分:1)
根据您的描述,browsingImage
位于目标viewController中,所以
在这一行
itemToAdd.postingImage.image = browsingImage.image
您将目标imageview传递给源imageview
答案 2 :(得分:1)
您当前的视图控制器中无法访问IBOutlet。由于您的第二个视图尚未加载,因此这些商店尚未初始化。
相反,您可以在第二个viewController中创建一个UIImage变量,并在prepareForSegue中为其赋值。
在你的第二个viewController的viewDidLoad方法中,将该值分配给你的ImageView插座。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "toBrowsePage" {
let destination = segue.destinationViewController as! ListPage
destination.receivedImage = postingImage.image
}
}
在你的下一个viewController中声明一个名为
的变量@IBOutlet weak var postingImage: UIImageView!
var receivedImage : UIImage?
在viewDidLoad方法
中postingImage.image = receivedImage
答案 3 :(得分:0)
在发生Segue
时,您的UIImageView未初始化,因此您无法为其分配图像,最佳做法是通过UIImage
并初始化您的UIImageView
在viewDidLoad
。
因此,在您的ListPage
班级中,将UIImage
类型的属性更改为prepareForSegue
行
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "toBrowsePage" {
var itemToAdd = segue.destinationViewController as! ListPage
itemToAdd.image = browsingImage.image
}
}
在目的地的viewDidLoad
或viewDidAppear
viewController
,你会做同样的事情
browsingImage.image = image