【发布时间】:2011-10-15 22:17:00
【问题描述】:
我有一个操作表,其中包含根据情况而有所不同的选项。有足够多的不同按钮标题,我想首先构建这些按钮标题的数组,但我不知道如何将其转换为可变参数格式。
我想做这样的事情:
NSMutableArray *buttonTitles = [NSMutableArray array];
if (condition1) {
[buttonTitles addObject: @"Do action 1"];
}
if (condition2) {
[buttonTitles addObject: @"Do action 2"];
}
if (condition3) {
[buttonTitles addObject: @"Do action 3"];
}
if (condition4) {
[buttonTitles addObject: @"Do action 4"];
}
UIActionSheet *actionSheet = [[[UIActionSheet alloc] initWithTitle: nil delegate: self cancelButtonTitle: @"Cancel" destructiveButtonTitle: nil otherButtonTitles: buttonTitles] autorelease];
现在很明显,如果我不得不这样做,我可以这样做:
UIActionSheet *actionSheet = nil;
if (condition1 && condition2 && condition3 && condition4) {
actionSheet = [[[UIActionSheet alloc] initWithTitle: nil delegate: self cancelButtonTitle: @"Cancel" destructiveButtonTitle: nil otherButtonTitles: @"Do action1", @"Do action2", @"Do action3", @"Do action 4", nil] autorelease];
} else if (condition1 && condition2 && condition3 && !condition4) {
actionSheet = [[[UIActionSheet alloc] initWithTitle: nil delegate: self cancelButtonTitle: @"Cancel" destructiveButtonTitle: nil otherButtonTitles: @"Do action1", @"Do action2", @"Do action3", nil] autorelease];
}
// else ...
// about 14 other cases!
但这太可怕了。有人知道一些不错的语法糖来帮助我吗?
编辑:
有人建议我使用addButtonWithTitle,从表面上看它看起来很棒,不幸的是,它在取消按钮之后放置了附加按钮,这是不可取的。
我认为这是 Apple 代码的错误,因为他们在 addButtonWithTitle 上的文档指出:
// adds a button with the title. returns the index (0 based) of where it was added. buttons are displayed in the order added except for the
// destructive and cancel button which will be positioned based on HI requirements. buttons cannot be customized.
HI 要求(Apple 自己的人机界面指南)支持所有其他选项下方的取消按钮,所以我会说 Apple 搞砸了。当然,这并没有真正帮助我,所以我又开始尝试在 NSArray 和 varargs 之间进行转换,但我仍然不知道该怎么做。
【问题讨论】:
标签: iphone objective-c ios uiactionsheet variadic-functions