2017-08-06 3 views
0

Ich möchte, dass mein Bild, das in meiner Tabellenansicht Zelle vollständig gescreent wird, wenn Sie wie von einem uigesture_recognizer angezapft angezapft wird.Vollbild ein Bild in einer Tabellenansicht Zelle, wenn angezapft Swift

Das Problem ist, dass meine didSelectRowAt-Funktion den postedimage Bezeichner nicht erkennt.

Verwendung von ungelösten Bezeichner 'postedImage'

Wie kann ich um dieses Problem zu bekommen?

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]) 
} 

Antwort

1

Ich denke, man sollte zunächst prüfen und den Anruf in didSelect Funktion ändern:

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

zu

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

jetzt Ihre addImageViewWithImage wird Akzeptieren Sie das Bild aus dem ImageView, das in der Zelle enthalten ist.

+0

Aktie mehr Informationen, wenn dies nicht hilft. –

+0

Dies erlaubt mir, das Bild zu öffnen, aber wenn ich erneut tippe, um das Bild zu schließen, geht das Bild zum nächsten Bild im Array. Auch ich habe vergessen zu erwähnen, dass 'imageView.image! = image' sollte 'imageView.image = image' sein. –

+0

@JackRichards, die passiert, weil beim Tippen auf Ihre Didselect-Methode erneut ausgelöst wird, da sie Vorrang vor der Tippgeste hat. Sie müssen eine andere Logik hinzufügen, die grundsätzlich überprüft, ob das Bild geöffnet ist und wenn ja, dann schließen Sie das Bild oder was auch immer Sie tun möchten. Vielleicht benutzen Sie ein paar Flaggen. –

0

Das Problem ist, dass Sie kein Array verwenden. Es scheint wie gepostetes Bild ist ein UIImageView. Also wird es nicht funktionieren. Sie müssen ein Array verwenden.

0

Swift 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() 
} 
Verwandte Themen