2017-08-06 44 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() 
} 
相关问题