2012-06-25 7 views
0

내 scrollView에서 이미지를 제거하는 데 문제가 있습니다. UIScrollView에 이미지를 넣은 다음 버튼을 클릭합니다. 클릭하면 삭제할 것인지 묻는 경고보기가 나타납니다. 예인 경우 내 NSDocumentDirectory에서 삭제하지만 내보기에서는 삭제하지 않습니다. 내 이미지는 ImagePicker에서 가져온 NSDocumentDirectory입니다.배열에서 버튼이 삭제되었지만보기에 표시되지 않습니다.

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

세트 태그 값은

(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를 호출하여 다음과 같은 기능의 버튼을 얻을 button.then합니다. 그것이하는 것처럼 보이는 것은 서로 위에 같은 이미지를 포함하는 버튼을 만드는 것입니다. 귀하의 코드는보기에서 그것을 제거하는 것으로 보이지만 비슷한 버튼이 바로 아래에있는 것처럼 보입니다. 따라서 모든 이미지를 추가하고 addImage:에서 이미지를 제거한 후에 만 ​​createScrollView으로 전화하십시오. 이 당신을 도울 것입니다

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 : 이외의 곳에서 호출 할 때는 스크롤 뷰에 코드를 추가해야합니다. 그렇지 않으면 createScrollView 시작 부분에서 [scrollview.subviews valueForKey : @ "removeFromSuperview"]를 호출하는 것이 가장 빠를 것입니다. 분명히 그것에 대해가는 가장 좋은 방법은 아니지만 그것을 끝낼 것입니다. – 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]; (for UIr * 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]; 
} 
관련 문제