我正在尝试检测用户是否按下了actionSheet上的cancelButton或destructive按钮。根据他/她的输入,我想修改屏幕上显示的警报消息。
所以我尝试使用if
检查buttonIndex
,但事实证明buttonIndex
值不会随用户的输入而改变。
UIActionSheet *informUser = [[UIActionSheet alloc] initWithTitle:@"Missing data" delegate:self cancelButtonTitle:@"Thanks for telling me!" destructiveButtonTitle:@"I have ignored it!" otherButtonTitles:nil];
[informUser showInView:self.view];
// NSLog(@"Cancel button = %d", informUser.cancelButtonIndex);
// NSLog(@"Destructive button = %d", informUser.destructiveButtonIndex);
if(informUser.cancelButtonIndex == 1)
{
NSString *msg = [[NSString alloc] initWithFormat:@"Pls enter the number."];
UIAlertView *alertUser = [[UIAlertView alloc] initWithTitle:@"Missing data" message:msg delegate:self cancelButtonTitle:@"Thanks!" otherButtonTitles:nil];
[alertUser show];
}
我也尝试过使用单独的方法:
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex;
但是,当我在同一个屏幕上的不同位置有多个UIAlert
时,我的结果会出错。
简而言之,我想对用户的不同操作/输入使用不同的UIAlert
。因此,如何检测用户按下actioSheet
上的哪个按钮?
谢谢。
答案 0 :(得分:1)
实施UIActionSheetDelegate
并使用方法:
– actionSheet:clickedButtonAtIndex:
索引定义了您点按的按钮。
如果您不想使用按钮索引,可以使用
获取点按按钮的按钮标题– buttonTitleAtIndex:
然后您可以将结果与按钮标题字符串进行比较。
修改强> 如果要使用更多操作表,可以为每个操作表设置标记值。例如。 ActionSheet1有actionsheet.tag = 1等等。
然后,您可以通过给定操作表的标记切换– actionSheet:clickedButtonAtIndex:
。 E.g:
switch (actionsheet.tag) {
case 1:
// do stuff
break;
case 2:
// do stuff
break;
default: break;
}
编辑2: 这是一个示例类,应该向您显示逻辑:
标题文件:
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UIActionSheetDelegate>
@end
实施档案:
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIActionSheet *as1 = [[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Delete" otherButtonTitles:@"Ok", nil];
as1.tag = 0;
as1.delegate = self;
UIActionSheet *as2 = [[UIActionSheet alloc] initWithTitle:@"Title2" delegate:self cancelButtonTitle:@"Cancel2" destructiveButtonTitle:@"Delete2" otherButtonTitles:@"Ok2", nil];
as2.tag = 1;
as2.delegate = self;
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
switch (actionSheet.tag) {
case 0: // as1
switch (buttonIndex) {
case 0:
// button index 0
break;
case 1:
// button index 1
break;
//....
default:
break;
}
break;
case 1: // as2
switch (buttonIndex) {
case 0:
// button index 0
break;
case 1:
// button index 1
break;
//....
default:
break;
}
break;
default:
break;
}
}
@end