Obj-C Switch语句整数变量iPhone

时间:2011-02-28 02:06:04

标签: iphone objective-c switch-statement uiactionsheet

我正在尝试使用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语句之前将值写入常量(?)?

提前致谢!

2 个答案:

答案 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;
}