У меня есть лист действий с опциями, которые варьируются в зависимости от обстоятельств. Существует достаточно разных заголовков кнопок, которые я хотел бы сначала создать из этих заголовков, но я не могу понять, как преобразовать их в формат varargs.
Я хочу сделать что-то вроде этого:
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!
Но это было бы ужасно. Кто-нибудь знает какой-нибудь хороший синтаксический сахар, чтобы помочь мне?
EDIT:
Было предложено использовать 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, что я до сих пор не знаю, как это сделать.