有条件地传递变量参数

时间:2011-05-17 05:15:35

标签: iphone objective-c macos conditional variadic-functions

在我的一个iPhone应用程序中,我需要有条件地将变量参数发送到操作表。即

if(condition1)
    otherButtonTitles = @"Button1", @"Button2", nil
else
    otherButtonTitles = @"Button3", @"Button4", nil

UIActionSheet *mediaActionsSheet = [[UIActionSheet alloc] initWithTitle: nil
                                                             delegate: self
                                                    cancelButtonTitle: @"Cancel"
                                               destructiveButtonTitle: nil
                                                    otherButtonTitles: otherButtonTitles];

这样做的语法是什么?应如何定义otherButtonTitles的数据类型?

提前致谢。

此致 迪帕

4 个答案:

答案 0 :(得分:7)

UIActionSheet * mediaActionsSheet;
mediaActionSheet = [[UIActionSheet alloc] initWithTitle: nil
                                               delegate: self
                                      cancelButtonTitle: @"Cancel"
                                 destructiveButtonTitle: nil
                                      otherButtonTitles:nil];


if(condition1){

    [mediaActionsSheet addButtonWithTitle:@"Button1"];
    [mediaActionsSheet addButtonWithTitle:@"Button2"];
}
else {

    [mediaActionsSheet addButtonWithTitle:@"Button3"];
    [mediaActionsSheet addButtonWithTitle:@"Button4"];
}

答案 1 :(得分:3)

你做不到。 (嗯,这不是不可能,但你不想这样做。)

只需使用

UIActionSheet *mediaActionsSheet=nil;
if(condition){
         mediaActionsSheet=[[UIActionSheet alloc] initWithTitle: nil
                                                         delegate: self
                                                cancelButtonTitle: @"Cancel"
                                           destructiveButtonTitle: nil
                                                otherButtonTitles: @"button1",@"button2",nil];
}else{
         mediaActionsSheet=[[UIActionSheet alloc] initWithTitle: nil
                                                         delegate: self
                                                cancelButtonTitle: @"Cancel"
                                           destructiveButtonTitle: nil
                                                otherButtonTitles: @"button2",@"button3",nil];
}

如果你真的想构造一个变量来保存可变数量的参数,请从this Wikipedia article开始。但你真的不想这样做。我承诺。

答案 2 :(得分:1)

您可以在您的条件下创建操作表。

UIActionSheet *mediaActionsSheet;
if(condition1)
    {
   mediaActionsSheet  = [[UIActionSheet alloc] initWithTitle: nil
                                                             delegate: self
                                                    cancelButtonTitle: @"Cancel"
                                               destructiveButtonTitle: nil
                               otherButtonTitles:@"Button1", @"Button2", nil];
}

else


{
mediaActionsSheet  = [[UIActionSheet alloc] initWithTitle: nil
                                                         delegate: self
                                                 cancelButtonTitle: @"Cancel"
                                              destructiveButtonTitle: nil
                                 otherButtonTitles:@"Button3", @"Button4", nil];
}

答案 3 :(得分:0)

您可以创建2个操作表,并可以检查代理权限以获取适当的操作。 为什么不是2张动作单?

像这样的东西: - (void)actionSheetUIActionSheet *)modalView clickedButtonAtIndexNSInteger)buttonIndex { if(modalView == _ firstActionSheetView) { } 其他 { } }