alertView没有响应

时间:2012-06-20 03:30:47

标签: iphone ios xcode

所以我有UIScrollview UIImageView设置了一个按钮,我希望能够在每次点击图像时弹出alertView如果选择YES则会弹出图片将在NSDocumentDirectory中删除。我设法使alertView出现,但图像没有删除,因为我认为发送了错误的sender或button.tag。这是我的代码:

//我的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");
    }

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

在clickedButtonAtIndex函数中,您无法从单击的按钮获取任何引用,因为它是来自UIAlertView的回调。你可以获得内幕的这个功能都与点击的UIAlertView本身有关。

如果要删除所选图像,可以先在按钮点击功能中存储指针或单击按钮的标记。

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

答案 1 :(得分: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;
}