2015-07-23 15 views
8

Tôi đang cố gắng để di chuyển một người sử dụng hình ảnh tải lên từ một UIImageView khác UIImageView trên View Controller khác nhau. Tôi có thể yêu cầu người dùng tải lên hình ảnh và lưu nó vào UIImageView đầu tiên nhưng sau khi họ nhấn nút "Đăng", UIImageView trên bộ điều khiển chế độ xem tiếp theo vẫn trống.Đi qua hình ảnh khác View Controller (Swift)

Lưu ý: browsingImage là tên của UIImageView trên bộ điều khiển xem thứ hai (đích UIImageView)

Bất kỳ trợ giúp sẽ được đánh giá cao!

@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

không nên nó được itemToAdd.browsingImage.image = postingImage.image? –

Trả lời

1

Từ mô tả của bạn, browsingImage là điểm đến viewController, vì vậy trong dòng này

itemToAdd.postingImage.image = browsingImage.image 

Bạn vượt qua ImageView đích để nguồn ImageView

16

Trong prepareForSegue bạn không thể truy cập vào @IBOutlet s của trình điều khiển chế độ xem đích vì chúng chưa được thiết lập. Bạn nên gán một hình cho một thuộc tính của điều khiển xem đích, và sau đó di chuyển nó vào vị trí trong viewDidLoad:

Theo quan điểm của bộ điều khiển nguồn:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "toBrowsePage" { 
     let dvc = segue.destinationViewController as! ListPage 
     dvc.newImage = postingImage.image 
    } 
} 

Theo quan điểm điều khiển điểm đến:

class ListPage: UIViewController { 
    @IBOutlet weak var browsingImage: UIImageView! 
    var newImage: UIImage! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     browsingImage.image = newImage 
    } 
} 
0

Tại thời điểm Segue xảy ra UIImageView của bạn không được khởi tạo để bạn không thể chỉ định hình ảnh cho nó, thực hành tốt nhất là để vượt qua UIImage và khởi tạocủa bạntrong viewDidLoad.

như vậy trong lớp ListPage của bạn làm cho một loại tài sản của UIImage thay đổi dòng prepareForSegue của bạn như

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "toBrowsePage" { 


     var itemToAdd = segue.destinationViewController as! ListPage 

     itemToAdd.image = browsingImage.image 

     } 

    } 

trong viewDidLoad hoặc viewDidAppear điểm đến của bạn viewController bạn sẽ làm điều gì đó như thế này

browsingImage.image = image 
0

IBOutlets là không thể truy cập trong bộ điều khiển xem hiện tại của bạn. Các cửa hàng chưa được khởi tạo từ chế độ xem thứ hai của bạn chưa được tải.

Thay vào đó bạn có thể tạo biến UIImage trong chế độ xem thứ hai của bạnController và gán giá trị cho biến đó trong PrepareForSegue.

Và trong chế độ xem thứ hai của bạn Chế độ xemControllerDidLoad gán giá trị đó cho đầu ra ImageView của bạn.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

    if segue.identifier == "toBrowsePage" { 
     let destination = segue.destinationViewController as! ListPage 
     destination.receivedImage = postingImage.image 
    } 
} 

Trong viewController tiếp theo của bạn khai báo một biến gọi là

@IBOutlet weak var postingImage: UIImageView! 
var receivedImage : UIImage? 

Trong phương pháp viewDidLoad

postingImage.image = receivedImage 
Các vấn đề liên quan