2017-05-26 26 views
0

我有一個ViewController是一個CollectionViewDelegate。當用戶點擊圖像時,我想繼續在我的CollectionView中查看圖像的詳細視圖。我將細胞連接到細節VC並使用此代碼。爲什麼發送者在視圖控制器中繼續工作,而不是集合視圖單元格segue

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    //segue to detail view of image 
    if segue.identifier == "ShowDetail", 
     let detailImageView = segue.destination as? CollectionDetailViewController 
    { 
     detailImageView.imageName = sender as! UIImage 
    } 
} 

顯示的錯誤是「無法將發件人CollectionView轉換爲UIImage」。相反,當我通過我的VC進行探究時,我能夠將發件人投射到UIImage。這是爲什麼?

+0

'detailImageView.imageName' ???聽起來像它是一個字符串(圖像*名稱*)。如果是這樣,那就是爲什麼你不能將它設置爲'UIImage'。如果'.imageName'實際上是一個圖像,而不是一個字符串,那麼'sender'是什麼?它是一個集合視圖*單元*嗎?如果是這樣,那就是爲什麼... – DonMag

+0

.imageName是一個圖像,對我而言不好。是的,發件人是收集視圖單元格,我想知道爲什麼發件人必須是viewcontroller而不是爲了鑄造(發件人爲!UIImage)才能工作。 –

+0

基本上我的意思是通過連接故事板中的viewcontroller繼續,我能夠檢測到發件人爲在視圖中點擊的UIIMage。另一方面,如果我連接集合視圖單元格繼續,它不檢測在單元格中定義的圖像,而是它檢測到發件人爲單元格本身 –

回答

0

我不知道是什麼或爲什麼它在你沒有顯示的代碼中工作......但在這種情況下,如果sender是一個單元格,你不能簡單地聲明「現在你是一個UIImage」,因此它是如此。

我假設你有一個UIImageView您的收藏查看小區裏面,所以更可能的是,你想要做的事,如:

if let cell = sender as? MyCustomCell { 
    if let image = cell.theImageView.image as? UIImage { 
     detailImageView.imageName = image 
    } 
} 

注:我只是打字,不運行它,所以它可能需要調整或兩個。

+0

當我連接使用viewcontroller segue爲什麼圖像用作發件人,而不是視圖控制器本身? –

+0

正如我所說,我不知道,因爲我沒有看你的項目。但是試圖猜測....你必須做一些其他的事情才能讓'sender'成爲'UIImage'。例如,如果它是從代碼中調用的,則可以執行'self.performSegue(withIdentifier:「test」,sender:myImage)'。 – DonMag

+0

thx!我認爲它是因爲prepareForSegue只是viewcontroller的一種方法,並且不能通過像collection view cell這樣的對象來調用? –

相關問題