Удаление UIImageView из UIScrollView - PullRequest
2 голосов
/ 22 августа 2011

Я знаю, что уже было задано много вопросов, похожих на это.Пожалуйста, не отрицайте или не закрывайте вопрос.Я только что попытался реализовать решения, предоставленные для этих вопросов.Ничто не сработало для меня.И мой случай тоже немного другой.Вот оно:

Мое приложение состоит из галереи изображений.Это вид прокрутки, который отображает фотографии, полученные из базы данных sqlite.Пользователь может прокручивать изображения, добавлять или удалять изображения и т. Д. Я могу динамически добавлять изображение в галерею.Но проблема возникает, когда мне нужно реализовать функцию удаления.Я использую следующий код, но даже после вызова removeFromSuperView изображение не удаляется из прокрутки.

-(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];
}

Я уже создал uiscrollview в методе loadview.Затем, чтобы обновить представление после каждого удаления и добавления изображений, чтобы я мог отобразить обновленную галерею, я использую следующий фрагмент кода:

-(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 

// В следующем фрагменте кода я добавляю изображенияUIscrollView

    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];

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Убедитесь, что ваш [decksGallery viewWithTag:selectedEditDeck-1] не возвращает nil, и изображение действительно было удалено из вашей базы данных перед выполнением кода обновления.

Кроме того, вы устанавливаете imageView.tag = i; в своем коде создания,поскольку i будет равно 0, что является значением тега по умолчанию для каждого UIView, вам лучше исправить свой код создания.

0 голосов
/ 22 августа 2011

Если вы просто хотите удалить изображение из вашего imageView, вы также можете сделать imageView.image = nil;

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