2011-12-30 5 views
5

Есть много методов в SDK, которые запрашивают список строк, которые завершаются в ноль, например, в UIActionSheet:Построение всухую завершающим список NSString как NSString *

- (id)initWithTitle:(NSString *)title delegate:(id <UIActionSheetDelegate>)delegate cancelButtonTitle:(NSString *)cancelButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... 

«otherButtonTitles» в этом случае список NSStrings завершается нулем. То, что я хотел бы сделать, это вызвать этот метод с построенным NSMutableArray из NSStrings, потому что я хотел бы динамически создавать и упорядочивать аргументы. Как мне это сделать? Я не уверен, как создать в этом случае указатель NSS для NLS, и если его передача будет работать. Должен ли я выделить память для нее вручную и освободить ее?

ответ

9

не может преобразовать любой массив в вариационный список.

Однако для UIActionSheet, вы можете добавить эти otherButtonTitles после того, как лист создается, используя -addButtonWithTitle:

UIActionSheet* sheet = [[UIActionSheet alloc] initWithTitle:... 
                 /*etc*/ 
              otherButtonTitles:nil]; 
for (NSString* otherButtonTitle in otherButtonTitlesArray) 
{ 
    [sheet addButtonWithTitle:otherButtonTitle]; 
} 
+4

Это не является хорошим решением, если вы устанавливаете кнопку отмены на вашем UIActionSheet. Когда вы инициализируете лист, а затем добавляете 'otherButtons' с циклом, как указано выше, кнопка« Отмена »по какой-то причине окажется поверх них. – Arnold

+0

Должно решить проблему. [sheet setCancelButtonIndex: [номер листаOfButtons] - 1]; – mtwagner

+0

@mtwagner nope это только изменяет стиль кнопки - не порядок, в котором они отображаются –

5

мне нужно сделать динамическую таблицу действий, а также. Поэтому я сделал в основном пустой лист действий. Добавлены мои кнопки. Затем добавлена ​​кнопка «Отмена» и отмечена как отмена.

sheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:homeName, nil];  
[sheet addButtonWithTitle:otherButton1]; 
[sheet addButtonWithTitle:otherButton2]; 
[sheet addButtonWithTitle:@"Cancel"]; 
[sheet setCancelButtonIndex:[sheet numberOfButtons] - 1]; 
sheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent; 
[sheet showInView:self.view]; 
[sheet release]; 
+0

Это более полный ответ, чем принятый. Спасибо! –

1

Вы уверены, что CAN конвертировать NSArray в va_list. Например, для использования с NSString

- (id)initWithFormat:(NSString *)format arguments:(va_list)argList 

Как это:

+ (id)stringWithFormat:(NSString *)format array:(NSArray *)arguments; 
{ 
    NSRange range = NSMakeRange(0, [arguments count]); 
    NSMutableData *data = [NSMutableData dataWithLength:sizeof(id) * [arguments count]]; 
    [arguments getObjects:(__unsafe_unretained id *) data.mutableBytes range:range]; 
    return [[NSString alloc] initWithFormat:format arguments:data.mutableBytes]; 
} 
+0

все хорошо сказать, что вы МОЖЕТЕ это сделать, указывая на другой вариант использования; но МОЖЕТЕ ЛИ ВЫ делать это для случая использования, данного OP? – Ryan

+0

Это комментарий к первой строке принятого ответа, поэтому ваш комментарий не нужен – LorikMalorik

Смежные вопросы