#objective-c #nsarray #variadic-functions
#цель-c #nsarray #variadic-функции #objective-c
Вопрос:
Я уверен, что на этот вопрос уже где-то должен быть дан ответ, но я изо всех сил пытаюсь найти правильные условия поиска для ответа.
В моем коде objective-c у меня есть NSArray с неизвестным числом строк, которые я хочу передать его элементам в метод variadic init, в данном случае это the … список ‘otherButtonTitles’ в конструкторе UIActionSheet. Как этого можно достичь?
заранее спасибо
Ответ №1:
Я думаю, вам нужно было бы передать первый элемент массива конструктору, а затем использовать метод 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];
}
Комментарии:
1. Наверное, я ожидал чего-то более элегантного, спасибо, работает нормально.
Ответ №2:
Общего способа сделать это не существует, но конкретно для 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 может быть инициализирован аналогичным образом.