UIActionSheet:在正确的年代表中处理方法的调用

时间:2011-12-02 14:29:32

标签: objective-c ios uibarbuttonitem uiactionsheet

上下文
在我的应用程序中有两个UIBarButtonItems。 如果我点击第一个名为save-button的按钮,会出现UIActionSheet并要求我保存。当我接受保存过程时,实际图像应保存在库中。

当我点击第二个名为delete-button的按钮时,应开始通过UIActionSheet发出相同的请求。接受操作后,应删除图像。

为此,我有IBAction两种方法,UIActionSheet有一种方法。

方法的实施

-(IBAction)save: (id) sender{
UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle: @"Sure to save?"delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles: @"Save",@"Cancel",nil];
    actionSheet.tag = 100;
    [actionSheet showInView:self.view];
    [actionSheet release];
}
-(IBAction)bin: (id) sender{
UIActionSheet* actionSheet = [[UIActionSheet alloc] initWithTitle:@"Sure to delete?"delegate: self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Delete",@"Cancel",nil];
    actionSheet.tag = 101;
    [actionSheet showInView:self.view];
    [actionSheet release];
}

由于“willPresentActionSheet”无法在类中实现两次,我使用标签来处理保存和删除按钮。

-(void)willPresentActionSheet:(UIActionSheet*)actionSheet{
   if (actionSheet.tag == 100) {
        CGRect contextRect  = CGRectMake(0, 960, 768, 1004);
        UIGraphicsBeginImageContext(contextRect.size);  

    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *image1 = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(image1, nil, nil, nil);

} else if (actionSheet.tag == 101) {
    imageView.image = nil; 

    NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Default.png"];  
        [imageView setImage:[UIImage imageWithContentsOfFile:filePath]];
    } 
}

问题
当我按下删除按钮时,动作单显示,但同时(在我允许删除之前)图像被删除。

我的方法有什么不对或错过了什么? 如果我的应用程序或我的问题缺乏明确性,请不要回避询问。

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

听起来您正在尝试在用户单击操作表中的某个选项按钮后处理操作。但是,在动作表被呈现之前,将调用函数willPresentActionSheet。如果您只是在用户单击以在操作表中确认后才尝试删除图像,请查看UIActionSheetDelegate中的--clickedButtonAtIndex函数。

(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

请务必将UIActionSheet的委托人分配给处理操作表回调函数的类(最有可能的 - 上面显示的“self”)。

在clickedButtonAtIndex处理程序中,您仍然可以使用该标记来区分UIActionSheets并使用按钮的索引来确定单击了哪个。