2017-08-06 86 views
0

我希望當我的表格視圖單元格內的圖像按照uigesturerecognizer的提示進行完全屏蔽時。在桌面單元內全屏顯示一個圖像Swift

問題是我的didSelectRowAt函數不能識別postedimage標識符。

使用未解決的標識符 'postedImage'

如何解決此問題得到什麼?

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! FeedTableViewCell 

    imageFiles[indexPath.row].getDataInBackground { (data, error) in 

     if let imageData = data { 

      if let downloadedImage = UIImage(data: imageData) { 

       cell.postedImage.image = downloadedImage 

      } 

     } 

    } 

    cell.postedImage.image = UIImage(named: "test.png") 

    return cell 
} 

func removeImage() { 

    let imageView = (self.view.viewWithTag(100)! as! UIImageView) 
    imageView.removeFromSuperview() 
} 

func addImageViewWithImage(image: UIImage) { 

    let imageView = UIImageView(frame: self.view.frame) 
    imageView.contentMode = .scaleAspectFit 
    imageView.backgroundColor = UIColor.black 
    imageView.image! = image 
    imageView.tag = 100 

    let dismissTap = UITapGestureRecognizer(target: self, action: #selector(self.removeImage)) 
    dismissTap.numberOfTapsRequired = 1 
    imageView.addGestureRecognizer(dismissTap) 
    self.view.addSubview(imageView) 
} 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    self.addImageViewWithImage(image: postedImage[indexPath.row]) 
} 

回答

1

我覺得你應該先檢查並 功能從didSelect改變呼叫:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    self.addImageViewWithImage(image: postedImage[indexPath.row]) 
} 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let cell = tableView.cellForRow(at: indexPath) as! FeedTableViewCell 
    self.addImageViewWithImage(image: cell.postedImage.image) 
} 

現在,您addImageViewWithImage會接受單元格中包含的ImageView中的圖像。

+0

份額更多的信息,如果這沒有幫助。 –

+0

這允許我打開圖像,但是當我再次點擊以關閉圖像時,會轉到數組中的下一個圖像。 另外我忘了提及'imageView.image! = image'應該是'imageView.image = image'。 –

+0

@JackRichards這是因爲攻擊你的didselect方法而再次觸發,因爲它優先於輕擊手勢。你將不得不添加一個不同的邏輯,基本上檢查圖像是否打開,如果是,然後關閉圖像或任何你想做的事情。也許使用一些標誌。 –

0

問題是你沒有使用數組。它看起來像postedImage是一個UIImageView。所以它不會工作。你需要使用一個數組。

0

斯威夫特3

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let cell = collectionView.cellForItem(at: indexPath) as! ImageSliderCollectionViewCell 
    self.imageTapped(image: cell.problemImage.image!) 
} 

func imageTapped(image:UIImage){ 
    let newImageView = UIImageView(image: image) 
    newImageView.frame = UIScreen.main.bounds 
    newImageView.backgroundColor = .black 
    newImageView.contentMode = .scaleAspectFit 
    newImageView.isUserInteractionEnabled = true 
    let tap = UITapGestureRecognizer(target: self, action: #selector(dismissFullscreenImage)) 
    newImageView.addGestureRecognizer(tap) 
    self.view.addSubview(newImageView) 
    self.navigationController?.isNavigationBarHidden = true 
    self.tabBarController?.tabBar.isHidden = true 
} 

func dismissFullscreenImage(_ sender: UITapGestureRecognizer) { 
    self.navigationController?.isNavigationBarHidden = false 
    self.tabBarController?.tabBar.isHidden = false 
    sender.view?.removeFromSuperview() 
}