2 Stimmen

Entfernen von UIImageView aus UIScrollView

Meine App besteht aus einer Bildergalerie. Es ist eine Scroll-Ansicht, die Bilder aus der Sqlite-Datenbank abgerufen zeigt. Der Benutzer kann die Bilder durchblättern, Bilder hinzufügen oder löschen usw. Ich kann ein Bild dynamisch in die Galerie einfügen. Aber das Problem kommt, wenn ich die Löschfunktionalität implementieren muss. Ich verwende den folgenden Code, aber selbst nach dem Aufruf von removeFromSuperView das Bild wird nicht aus der Bildlaufansicht entfernt.

-(void)deleteDeck{ 

if(selectedEditDeck!=0){
    [deck deleteSelectedDeck:selectedEditDeck]; //deleting from database

   //problem starts here ***
    [(UIImageView*)[decksGallery viewWithTag:selectedEditDeck-1]removeFromSuperview];
    [self loadGallery];
    selectedEditDeck=0;
  //Ends here*****

    [tableData release];
    tableData=[NSMutableArray array];
    [self showCardNamesinTable];
    [aTableView reloadData];
}

Ich habe die uiscrollview bereits in der loadview-Methode erstellt. Um die Ansicht nach jedem Löschen und Hinzufügen von Bildern zu aktualisieren, damit ich die aktualisierte Galerie anzeigen kann, verwende ich den folgenden Codeabschnitt:

-(void)loadGallery{                                                                                //Reloading all for adding a single deck image.

//Database part****
NSString *sqlStr = [NSString stringWithFormat:@"select first_card from decksTable"]; 
char *sql = (char*)[sqlStr UTF8String];
kidsFlashCardAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSMutableArray *galleryImagesArray=[appDelegate.dbConnection fetchColumnFromTable:sql col:0];
NSArray *sysPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
NSString *docDirectory = [sysPaths objectAtIndex:0];
numberofImages = [galleryImagesArray count];
printf("number is %d",numberofImages);//Database part of code ends here 

//Im folgenden Codefragment füge ich Bilder zu UIscrollView hinzu

    for (int i = 0; i < [galleryImagesArray count]; i++) {
    CGFloat yOrigin = i * 65;
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", docDirectory,[galleryImagesArray objectAtIndex:i]];
    galleryImage = [[UIImageView alloc] initWithFrame:CGRectMake(yOrigin+140, 15,50,50 )];
    //galleryImage.tag=[galleryImagesArray count];
    galleryImage.tag=i;
    printf("THE TAG IS %d",galleryImage.tag);
    galleryImage.clipsToBounds=YES;
    galleryImage.layer.cornerRadius=11.0;
    galleryImage.backgroundColor=[UIColor clearColor];
    galleryImage.image =[UIImage imageWithContentsOfFile:filePath];
    [decksGallery addSubview:galleryImage];
    [galleryImage release];
}
decksGallery.contentSize = CGSizeMake(115*[galleryImagesArray count], 80);
//[decksGallery reloadInputViews];

1voto

xuzhe Punkte 5090

Stellen Sie sicher, dass Ihr [decksGallery viewWithTag:selectedEditDeck-1] kehrt nicht zurück nil und das Bild wurde tatsächlich aus Ihrer Datenbank gelöscht, bevor der Aktualisierungscode ausgeführt wurde.

Darüber hinaus stellen Sie imageView.tag = i; in Ihrem Erstellungscode, da die i 0 sein würde, was der Standardwert des Tags für jede UIView ist, solltest du deinen Erstellungscode besser ebenfalls korrigieren.

0voto

Robin Punkte 9999

Wenn Sie nur das Bild aus Ihrer imageView entfernen möchten, können Sie auch imageView.image = nil verwenden;

UIImageView*imageView = (UIImageView*)[decksGallery viewWithTag:selectedEditDeck-1];
[imageView removeFromSuperview];
imageView = nil;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X