上下文
在我的应用程序中有两个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]];
}
}
问题
当我按下删除按钮时,动作单显示,但同时(在我允许删除之前)图像被删除。
我的方法有什么不对或错过了什么? 如果我的应用程序或我的问题缺乏明确性,请不要回避询问。
提前感谢您的帮助
答案 0 :(得分:0)
听起来您正在尝试在用户单击操作表中的某个选项按钮后处理操作。但是,在动作表被呈现之前,将调用函数willPresentActionSheet。如果您只是在用户单击以在操作表中确认后才尝试删除图像,请查看UIActionSheetDelegate中的--clickedButtonAtIndex函数。
(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
请务必将UIActionSheet的委托人分配给处理操作表回调函数的类(最有可能的 - 上面显示的“self”)。
在clickedButtonAtIndex处理程序中,您仍然可以使用该标记来区分UIActionSheets并使用按钮的索引来确定单击了哪个。