2015-07-10 47 views
0

我有一個表格視圖,每個單元格中有一個圖像。我想在用戶選擇單元格時將該圖像傳遞給第二個視圖控制器。我從單元格到第二個視圖控制器設置了一個segue。如何將圖像從tableview轉移到第二個視圖

但是,我的代碼在第二個視圖控制器中爲圖像生成nil。

我敢肯定,我應該使用代表這一點,我發現很多的例子,通過他們回到第一個視圖控制器,但非這樣。我沒有線索如何設置。

任何人都可以舉個例子嗎?

的TableView(第一個視圖控制器)

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "imageCropSegue"{ 
     if let destination = segue.destinationViewController as? cropImageView { 
      if let profileIndex = self.parseTable.indexPathForSelectedRow()?.row { 
       var index = NSIndexPath(forRow: profileIndex, inSection: 0) 

       var cell = self.parseTable.cellForRowAtIndexPath(index) as! TableViewCell 
       destination.cropImage.image = cell.cellImage.image //throws an exception as destination.cropImage = nil 
      } 
     } 

    } 
} 

第二個視圖控制器

class cropImageView:UIViewController{ 
    @IBOutlet weak var cropImage: UIImageView! 
    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 
} 
+1

教程一步一步將數據傳遞到下一個視圖控制器在迅速的http:// jamesleist。 com/ios-swift-passing-data-between-viewcontrollers/ –

+0

你可以使用Observer –

+0

pass'UIImage'不要從第一個視圖設置。從第二個視圖的viewDidLoad設置它。 –

回答

0

第二個視圖控制器:

 
class cropImageView:UIViewController{ 
    @IBOutlet weak var cropImage: UIImageView! 
    var selectedImage : UIImage? 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.cropImage.image = self.selectedImage //Assign selected Image here 

    } 
} 

PrepareForSegue在的firstView控制器的方法如:

 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "imageCropSegue"{ 
     if let destination = segue.destinationViewController as? cropImageView { 
      if let profileIndex = self.parseTable.indexPathForSelectedRow()?.row { 
       var index = NSIndexPath(forRow: profileIndex, inSection: 0) 

       var cell = self.parseTable.cellForRowAtIndexPath(index) as! TableViewCell 
       //destination.cropImage.image = cell.cellImage.image //Change here 

       destination.selectedImage= cell.cellImage.image 
      } 
     } 

    } 
} 
0

切勿嘗試更新從SEGUE任何UI,總是從賽格瑞通圖像名稱和或者你可以通過索引你的然後在您的下一個視圖控制器中,您可以將該圖像分配給ImageViewViewDidLoad方法。

在你的代碼試圖從你的FirstViewController與此代碼分配圖片:

destination.cropImage.image = cell.cellImage.image 

這不是指定圖像的好方法。相反的,你可以只從第一視圖通過ImageName第二視圖從imageName陣列像這樣:

destination.imageName = yourImageNameArrya[index] 

和你的第二個視圖控制器,你必須增加其持有這個名字一個實例如下所示:

class cropImageView:UIViewController{ 

    let imageName = "" //This will hold your image name 

    @IBOutlet weak var cropImage: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     cropImage.image = UIImage(named: imageName) 
    } 
} 

希望這會幫助你。

0

cropImage未在prepareForSegue方法中初始化。嘗試將圖像存儲到cropImageView的字段中,並將其設置爲viewDidLoad()生命週期中的cropImage.image。

相關問題