我正在尝试使用switch语句来读出UIActionSheet中的单击按钮(iPhone编程)。
以下是我的FirstViewController.m:
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
int countarray=[areaselectArray count];
switch (buttonIndex) {
case countarray: //cancel button has been pressed
//do stuff
break;
default:
area = [areaselectArray objectAtIndex:(buttonIndex)];
[[NSUserDefaults standardUserDefaults] setObject:area forKey:@"mulValue"];
[areaselectArray release];
NSLog(@"Released areaselectArray");
break;
}
}
UIActionSheet的按钮是从我之前构建的(并且尚未发布)的数组构建的。我使用
将“取消”按钮放在列表的末尾int countarray=[areaselectArray count];
[areaselect.cancelButtonIndex = countarray;]
早些时候分配我的UIActionSheet。由于按钮的数量根据数组中的条目数量而变化,我希望“取消”按钮简单地关闭UIActionSheet,但在所有其他实例中,Switch语句将单击按钮的值写入“mulValue” “在standardUserDefaults。
有没有办法做到这一点?我现在的主要问题当然是开关函数不会接受变量(就像我的例子中的countarray)。有没有办法在输入switch语句之前将值写入常量(?)?
提前致谢!
答案 0 :(得分:2)
为什么不使用if-statement而不是switch-statement?您可以使用cancelButtonIndex属性来检测按下取消按钮。
if (buttonIndex == actionSheet.cancelButtonIndex) {
// cancel button has been pressed
// do stuff
}
此外,您可以使用标题字符串来比较按钮。但是,按钮标题可能已本地化。小心。
NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];
if ([buttonTitle isEqualToString:@"Cancel"]) {
// cancel button has been pressed
// do stuff
} else {
//
}
答案 1 :(得分:0)
正如您所发现的那样,只有一个常数可以跟随'案例'。必须在编译时知道在switch语句中比较变量的值。
要获得所需的功能,请使用if / else结构。就那么简单。 ;)
编辑:
而且,没有,这将不编译(由于我之前提到过):
int n = 4;
const int a = someVariable;
switch (n) {
case a:
printf("hi");
break;
}