Как передать элементы массива в переменную функцию? - PullRequest
5 голосов
/ 14 ноября 2010

Я уверен, что на этот вопрос уже должен быть дан ответ, но я изо всех сил пытаюсь найти правильные условия поиска для ответа.

В моем коде target-c у меня есть NSArray с неизвестными числовыми строками, которые я хочу передать его элементам в метод variadic init, в данном случае это список ... otherButtonTitles в конструкторе UIActionSheet. Как этого достичь?

заранее спасибо

Ответы [ 2 ]

3 голосов
/ 14 ноября 2010

Нет общего способа сделать это, но для UIActionSheet, в частности, вам не нужно использовать этот конструктор.

UIActionSheet *sheet = [[UIActionSheet alloc] init];

// set properties
sheet.title = @"Title!";

// add buttons
for (NSString *buttonTitle in otherButtonTitles) {
    [sheet addButtonWithTitle:buttonTitle];
}

sheet.cancelButtonIndex =
    [sheet addButtonWithTitle:@"Cancel"];

UIAlertView можно инициализировать аналогичным образом.

3 голосов
/ 14 ноября 2010

Я думаю, вам нужно будет передать первый элемент массива в конструктор, а затем использовать метод addButtonWithTitle, чтобы перебрать оставшиеся элементы и добавить их:

UIActionSheet *mySheet = [[UIActionSheet alloc] initWithTitle:title delegate:delegate cancelButtonTitle:cancelButtonTitle destructiveButtonTitle:destructiveButtonTitle otherButtonTitles:[myOtherButtons objectAtIndex:0],nil];

NSMutableArray *otherbuttons = myOtherButtons;
[otherButtons removeObjectAtIndex:0];

NSEnumerator *enumerator = [otherButtons objectEnumerator];
id anObject;

while (title = [enumerator nextObject]) {
    [mySheet addButtonWithTitle:title];
}
...