2016-12-06 3 views
0

Ich bin neu zu swift, mit swift 3, baute ich tableview, liest Gruppe von Bildern und ich möchte es wie folgt haben: wenn Benutzer ein Bild in der Tabellenansicht auswählen Ich zeige es in einer UIImageView an und wähle ein Bild ab, das er bereits in der Tabellenansicht ausgewählt hat, um es aus der UIImageView zu entfernen (Mehrfachauswahl ist aktiviert). Mein Code unten funktioniert nur für eine Bildauswahl, wenn jedoch mehrere Bilder ausgewählt und dann abgewählt werden, wird der zuletzt ausgewählte nur aus dem UIImageview entfernt. Also meine Frage ist, wie kann ich die UIImageView entfernen, die in der UITableView zum abgewählten Datensatz gehörtWie UIView von der SuperView mit spezifischer Position programmgesteuert entfernen

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

     image_view.image = UIImage(data: Saveddata[indexPath.row].photo as! Data) 
      //create image view programmatically 
      currentImageView = UIImageView(frame: CGRect(x: 130 + (i * 10), y: 50 + (i * 5), width: 50, height: 100)) 
      currentImageView.contentMode = .scaleAspectFit 
      currentImageView.image = image_view.image 
      view.addSubview(currentImageView as UIView)   
    } 

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 

     currentImageView.removeFromSuperview() 


    } 
+0

Sie können View- oder UI-Komponenten nicht einfach in 'UITableViewCell' entfernen. Es ist für andere Zeilen wiederverwendbar. Was Sie tun können, ist ein Flag mit dem Global-Array zu setzen und 'indexPath.row' als Index für diejenigen zu behalten, die Sie entfernt haben. Dann prüfen Sie in Ihrem 'cellForRow', ob dieser Index auftritt, blenden Sie das Bild aus oder ändern Sie die Einschränkung 'width' in 0 – xmhafiz

+0

vermeiden Sie' addSubview', stattdessen verwenden Sie stackboard oder xib mit IBOutlet. Dies verhindert das Erstellen doppelter Ansichten in der Zelle – xmhafiz

+0

@ h44f33z, danke aber ich versuche nicht, es aus der Tabellenansicht zu entfernen. Ich versuche, es aus einer von mir erstellten UIview zu entfernen und das Bild hinzuzufügen, wenn dieses Bild in der tableview – rania

Antwort

0

Sie tag für jeden UIImageView basierend auf den indexPath.row nutzen könnten, so könnten Sie nach Tag beziehen.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    let image = UIImage(data: Saveddata[indexPath.row].photo as! Data) 
    //create image view programmatically 
    let imageView = UIImageView(frame: CGRect(x: 130 + (i * 10), y: 50 + (i * 5), width: 50, height: 100)) 
    imageView.contentMode = .scaleAspectFit 
    imageView.tag = 100 + indexPath.row 
    imageView.image = image 
    view.addSubview(imageView as UIView) 
} 

func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) { 
    // get imageView by its tag   
    let deselectedImageView = view.viewWithTag(100 + indexPath.row) as! UIImageView 
    deselectedImageView.removeFromSuperview() 


} 
+0

liebte die Idee, aber es wurde ein Fehler zurückgegeben: Konnte Wert des Typs 'UIView' (0x10ea19b40) nicht in 'UIImageView' (0x10ea1b288) umgewandelt werden. – rania

+0

@rania aktualisiert meine Antwort durch Hinzufügen von 100 zu Tag, so würde es verwenden Tag 0 – xmhafiz

+0

OMG danke eine Million, es funktioniert jetzt und ich habe es. schätze deine Hilfe wirklich, habe lange nach einem Ausweg gesucht – rania

0

Wenn Sie Ihr Handy Aussehen aktualisiert werden sollen, wenn sie ausgewählt/abgewählt, sollten Sie die Methode setSelected(_:animated:) in Ihrer UITableViewCell Unterklasse außer Kraft setzen stattdessen zu versuchen, es direkt von Ihrer UITableViewDelegate Methode zu aktualisieren:

override func setSelected(_ selected: Bool, animated: Bool) { 
    // Do whatever you want depending on the selected value 
} 
Verwandte Themen