2016-09-07 5 views
1

ich diesen Code habe, die ein UIImageViews Bild in einem benutzerdefinierten tableviewcell versucht, zu aktualisieren, nachdem der Benutzer ein Bild aus ihrer BibliothekUIImageView Bild nicht aktualisiert, wenn in tableviewcell

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 
    let cell = tableView.dequeueReusableCellWithIdentifier("myJourneyPhotoCell") as! MyJourneyPhotoTableViewCell 

    cell.imgPhoto.image = image 

    cell.setCell(
     image 
    ) 
    tableView.reloadData() 

    CustomPhotoAlbum().saveImage(image) 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 
ausgewählt hat

Ich weiß, dass ich nicht brauchen beide

cell.imgPhoto.image 

und

cell.setCell 

aber ich habe versucht, beide Methoden und ne Einer von ihnen arbeitete. Ich kann das Bild sowohl nach der Auswahl im Tabellenansicht-Controller als auch den Tabellenansicht-Zellen-Klassen ausdrucken, so dass ich weiß, dass das Bild gesendet wird, aber es wird einfach nicht aktualisiert.

Das ist mein tableviewcell Klasse

@IBOutlet weak var imgPhoto: UIImageView! 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 

override func setSelected(selected: Bool, animated: Bool) { 
    super.setSelected(selected, animated: animated) 
} 

func setCell(
    image: UIImage) 
{ 
    self.imgPhoto.image = image 
    // self.imgPhoto.image = UIImage(named: "Calendar Active") // Test code 
    print(image) 
} 

Jede Hilfe sehr geschätzt wird.

+0

können Sie Ihren Code in cellForRowAtIndexPath veröffentlichen –

Antwort

0

Das liegt daran, dass Sie jedes Mal eine neue Zelle aus der Warteschlange entfernen, wenn Ihre Delegate-Methode didFinishPickingImage aufgerufen wird. Sie müssen den Überblick über den Indexpfad der Zelle zu halten, die angeklickt wird und dann verwenden

let cell = tableView.cellForRowAtIndexPath(indexPath) as! MyJourneyPhotoTableViewCell // Here the indexPth is the index path of your clicked cell 

die Zelle-Objekt zu erhalten und stellen Sie dann das jeweilige Bild.

0

Ihr Bild wird nicht in tableViewCell gesetzt, da nach Ihrem Code das tableView vor dem eingestellten Image neu geladen wird. Fügen Sie also den Reload-Tabellenansichtscode nach dem Bildsatz hinzu.

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 
    let cell = tableView.dequeueReusableCellWithIdentifier("myJourneyPhotoCell") as! MyJourneyPhotoTableViewCell 

    cell.imgPhoto.image = image 

    cell.setCell(
     image 
    ) 
    CustomPhotoAlbum().saveImage(image) 
    self.dismissViewControllerAnimated(true, completion: nil) 

    tableView.reloadData() 
} 
0

Fügen Sie ein Bild Variable in Ihrer benutzerdefinierten Zelle Klasse wie unten erwähnt:

var image : UIImage! 

nun das aufgenommene Bild auf diese Variable in Picker Delegatmethode zuweisen:

func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) { 
let cell = tableView.dequeueReusableCellWithIdentifier("myJourneyPhotoCell") as! MyJourneyPhotoTableViewCell 

cell.image = image 

CustomPhotoAlbum().saveImage(image) 
self.dismissViewControllerAnimated(true, completion: nil) 

}

Zuletzt müssen Sie in Ihrer benutzerdefinierten Zellenklasse

die folgende Methode hinzufügen
override func layoutSubviews() { 
    super.layoutSubviews(); 

    if(image){ 
     self.imgPhoto.image = image 
    }else{ 
     self.imgPhoto.image = UIImage.init(named: "DefaultImage") 
    } 

} 
0

Try to Use didFinishPickingMediaWithInfo von UIImagePickerControllerDelegate Methode

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 
    var image : UIImage! 
    image = info[UIImagePickerControllerOriginalImage] as? UIImage 
    let cell = tableView.dequeueReusableCellWithIdentifier("myJourneyPhotoCell") as! MyJourneyPhotoTableViewCell 

    cell.imgPhoto.image = image 
    dispatch_async(dispatch_get_main_queue()) { 
     tableView.reloadData() 
    } 
    CustomPhotoAlbum().saveImage(image) 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 
Verwandte Themen