2012-06-20 2 views
0

Так у меня есть UIScrollview с UIImageView набор с кнопкой, я хочу, чтобы иметь возможность всякий раз, когда изображение щелкали alertView выскочит, если выбрано ДА, то, что изображение будет удалено в NSDocumentDirectory. Мне удается сделать alertView, но изображение не удаляется, потому что я думаю, что отправляет неправильный sender или button.tag. Вот мой код:alertView не отвечает

// Мой Scrollview

UIScrollView *scrollView1 = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f,0.0f,300.0f,134.0f)]; 
[self.view addSubview:scrollView1]; 

int row = 0; 
int column = 0; 
for(int i = 0; i < _thumbs1.count; ++i) { 

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

    [scrollView1 addSubview:button]; 

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

// Кнопка

- (IBAction)buttonClicked:(id)sender { 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSInteger slotBG = [prefs integerForKey:@"integerKey"]; 

    if(slotBG == 1){ 
     UIAlertView *deleteMessage = [[UIAlertView alloc] initWithTitle:@"" 
                   message:@"DELETE?" 
                  delegate:self 
                cancelButtonTitle:@"NO" 
                otherButtonTitles:@"YES", nil]; 
     [deleteMessage show];   
    } 

// для моего AlertView

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; 

    if([title isEqualToString:@"YES"]){ 
     // I KNOW THIS IS SOMEWHAT WRONG BECAUSE OF THE SENDER having errors with it 
     UIButton *button = (UIButton *)sender; 
     [button removeFromSuperview]; 
     [_images objectAtIndex:button.tag]; 
     [_images removeObjectAtIndex:button.tag]; 
     [_images insertObject:[NSNull null] atIndex:button.tag]; 
     NSFileManager *fileManager = [NSFileManager defaultManager]; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%lu.png", button.tag]]; 
     [fileManager removeItemAtPath: fullPath error:NULL]; 
     NSLog(@"image removed"); 
    } 

Спасибо за помощь.

+1

Первое: если ('[название isEqualToString: @ "ДА"]) {' является ненужным накладных расходов. Почему бы просто не использовать 'if (buttonIndex == 1) {'? Во-вторых, откуда вы берете «отправителя»? Нет параметров 'alertView: clickedButtonAtIndex:' метод с именем 'sender' ... –

+0

Я, честно говоря, не знаю, сэр, потому что раньше я просто использовал удаляемую часть в' - (IBAction) buttonClicked: (id) sender' часть. Но я хотел добавить alertView, так что есть подтверждение. И теперь Im kinda испортился, – Bazinga

+0

Но разве это даже компиляция? Я сомневаюсь. –

ответ

1

В функции clickedButtonAtIndex вы не можете получить ссылку со своей кнопки, потому что это обратный вызов из UIAlertView. То, что вы можете получить инсайдерской, эта функция связана с кликом самого UIAlertView.

Если вы хотите удалить выбранное изображение, вы можете сначала сохранить указатель или тег нажатой кнопки в функции buttonClicked.

- (IBAction)buttonClicked:(id)sender { 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSInteger slotBG = [prefs integerForKey:@"integerKey"]; 

    if(slotBG == 1){ 
     // Get the pointer or tag of the clicked button 
     _clickedButton = (UIButton *)sender; 
     UIAlertView *deleteMessage = [[UIAlertView alloc] initWithTitle:@"" 
                   message:@"DELETE?" 
                  delegate:self 
                cancelButtonTitle:@"NO" 
                otherButtonTitles:@"YES", nil]; 
     [deleteMessage show];   
    } 
} 

Тогда вы можете использовать этот указатель/тег в функции clickedButtonAtIndex.

- (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]; 
     [_images insertObject:[NSNull null] atIndex:button.tag]; 
     NSFileManager *fileManager = [NSFileManager defaultManager]; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%lu.png", button.tag]]; 
     [fileManager removeItemAtPath: fullPath error:NULL]; 
     NSLog(@"image removed"); 
    } 

    // Remember to set it to nil when you finish 
    _clickedButton = nil; 
} 
+0

Спасибо за помощь. – Bazinga

0
- (IBAction)buttonClicked:(id)sender { 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    NSInteger slotBG = [prefs integerForKey:@"integerKey"]; 

    if(slotBG == 1){ 
     // Get the pointer or tag of the clicked button 
     _clickedButton = (UIButton *)sender; 
     UIAlertView *deleteMessage = [[UIAlertView alloc] initWithTitle:@"" 
                   message:@"DELETE?" 
                  delegate:self 
                cancelButtonTitle:@"NO" 
                otherButtonTitles:@"YES", nil]; 
deleteMessage.tag=1; 

     [deleteMessage show];   
    } 
} 

///////

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
    NSString *title = [alertView buttonTitleAtIndex:buttonIndex]; 

    if (alertView.tag==1) { 
    if (buttonIndex==1) { 
     UIButton *button = _clickedButton; 

     [button removeFromSuperview]; 
     [_images objectAtIndex:button.tag]; 
     [_images removeObjectAtIndex:button.tag]; 
     [_images insertObject:[NSNull null] atIndex:button.tag]; 
     NSFileManager *fileManager = [NSFileManager defaultManager]; 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"oneSlotImages%lu.png", button.tag]]; 
     [fileManager removeItemAtPath: fullPath error:NULL]; 
     NSLog(@"image removed"); 
    } 
} 
    // Remember to set it to nil when you finish 
    _clickedButton = nil; 
} 
Смежные вопросы