2012-06-25 3 views
0

У меня возникли проблемы с удалением изображения в моем scrollView, я помещаю свои изображения в UIScrollView, а затем добавляю кнопку, когда щелкнут, выдается предупреждение о том, хотите ли вы его удалить. Когда да, удаляет в моем NSDocumentDirectory, но не в моем представлении. Мои изображения от NSDocumentDirectory выбраны из ImagePicker.Кнопка удаляется в массиве, но не отображается.

- (void)addImage:(UIImage *)image { 
    [_images addObject:image]; 
    [_thumbs addObject:[image imageByScalingAndCroppingForSize:CGSizeMake(60, 60)]]; 
    [self createScrollView]; 
} 

- (void) createScrollView { 

    [scrollView setNeedsDisplay]; 
    int row = 0; 
    int column = 0; 
    for(int i = 0; i < _thumbs.count; ++i) { 

     UIImage *thumb = [_thumbs objectAtIndex:i]; 
     UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; 
     button.frame = CGRectMake(column*60+10, row*60+10, 60, 75); 
     [button setImage:thumb forState:UIControlStateNormal]; 
     [button addTarget:self 
        action:@selector(buttonClicked:) 
     forControlEvents:UIControlEventTouchUpInside]; 
     button.tag = i; 

     [scrollView addSubview:button]; 

     if (column == 4) { 
      column = 0; 
      row++; 
     } else { 
      column++; 
     } 

    } 
    [scrollView setContentSize:CGSizeMake(300, (row+1) * 60 + 10)]; 
} 

- (IBAction)buttonClicked:(id)sender { 
     _clickedButton = (UIButton *)sender; 
     UIAlertView *saveMessage = [[UIAlertView alloc] initWithTitle:@"" 
                   message:@"DELETE?" 
                  delegate:self 
                cancelButtonTitle:@"NO" 
                otherButtonTitles:@"YES", nil]; 
     [saveMessage show]; 
    } 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; 
if([title isEqualToString:@"YES"]) { 
      UIButton *button = _clickedButton; 
      [button removeFromSuperview]; 
      [_images objectAtIndex:button.tag]; 
      [_images removeObjectAtIndex:button.tag]; 

      NSFileManager *fileManager = [NSFileManager defaultManager]; 
      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
      NSString *documentsDirectory = [paths objectAtIndex:0]; 
      NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"images%lu.png", button.tag]]; 
      [fileManager removeItemAtPath: fullPath error:NULL]; 
      NSLog(@"image removed"); 
} 

- (void)viewDidLoad 
{ 
     self.slotBg = [[UIView alloc] initWithFrame:CGRectMake(43, 370, 310, 143)]; 
     CAGradientLayer *gradient = [CAGradientLayer layer]; 
     gradient.frame = self.slotBg.bounds; 
     gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor grayColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil]; 
     [self.slotBg.layer insertSublayer:gradient atIndex:0]; 
     [self.view addSubview:self.slotBg]; 
     self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f,0.0f,300.0f,130.0f)]; 
     [slotBg addSubview:self.scrollView]; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [_thumbs removeAllObjects]; 
    for(int i = 0; i <= 100; i++) 
    { 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDir = [paths objectAtIndex:0]; 

     NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%d.png", i]]; 
     NSLog(@"savedImagePath=%@",savedImagePath); 
     if([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]){ 
      [self addImage:[UIImage imageWithContentsOfFile:savedImagePath]]; 
      NSLog(@"file exists"); 
     } 
    } 
    NSLog(@"Count : %d", [_images count]); 
} 

ответ

0

установленное значение тега button.then получить кнопку в следующей функции по

(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
     UIButton *btn = (UIButton*)[scrollview viewWithTag:button.tag]; 
     //your button tag 
     [btn removeFromSuperView]; 
} 

+0

не работает, попробовал то, что вы сказали – Bazinga

+0

затем использовать NSLog для печати кнопки ссылку в обоих местах, где вы создаете и удаляете. – Madhumitha

1

Вы звоните createScrollView каждый раз, когда вы добавляете изображение в массив. Кажется, что это создает кнопки, содержащие одно и то же изображение друг над другом. Ваш код, кажется, удаляет его из представления, но похоже, что рядом с ним есть похожие кнопки. Поэтому позвоните createScrollView только после того, как вы добавите все изображения и удалите их из своего addImage:.

for(int i = 0; i <= 100; i++) 
{ 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDir = [paths objectAtIndex:0]; 

    NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%d.png", i]]; 
    NSLog(@"savedImagePath=%@",savedImagePath); 
    if([[NSFileManager defaultManager] fileExistsAtPath:savedImagePath]){ 
     [self addImage:[UIImage imageWithContentsOfFile:savedImagePath]]; 
     NSLog(@"file exists"); 
    } 
} 
[self createScrollView]; 
+0

Он не будет обновлять изображения в прокрутке, когда я добавляю другое изображение. – Bazinga

+0

@ Kobe.o4: Если вы имеете в виду, когда вы вызываете, если вне viewDidAppear:, тогда вы должны написать код, чтобы убедиться, что он добавляет его в вид прокрутки. В противном случае быстрым решением было бы вызвать [scrollview.subviews valueForKey: @ "removeFromSuperview"] в начале createScrollView. Не лучший способ это сделать, но все будет сделано. – MadhavanRP

+0

то, что я делаю, удаляет все _thumbs, а затем перезагружает его снова. – Bazinga

0
//after deleting the image from document directory just call viewDidAppear again... 

[self viewDidAppear:yes]; 

Надеется, что это поможет ...

+0

Вы уже сделали это, но он воссоздает представление, – Bazinga

+0

да, прежде чем вызвать его, попробуйте запустить следующий код. NSArray * arr = [scrollView subViews]; для (UIView * view in arr) [просмотреть removeFromSuperView]; затем вызовите [self viewDidAppear: yes]; – Abhishek

0

попробовать этот метод:

- (void)removeObjectWithTag:(int)objectTag 
{ 
    [_thumbs removeObjectAtIndex:objectTag]; 

    for (UIView *view in scrollView.subviews) 
    { 
     [view removeFromSuperview]; 
    } 

    scrollView.contentSize = CGSizeZero; 
    [self createScrollView]; 
} 
Смежные вопросы