Передача значения NSComboBox, которое находится внутри листа NSAlert
У меня есть NSAlert Sheet, внутри которого есть NSComboBox. Как я могу передать значение поля со списком, когда пользователь нажал кнопку NSAlert?
код:
NSComboBox* comboBox = [[NSComboBox alloc] initWithFrame:NSMakeRect(0, 0, 150, 26)];
[comboBox setTitleWithMnemonic:@"2"];
for (int i=2; i<[array count]+1; i++){
[comboBox addItemWithObjectValue:[NSString stringWithFormat:@"%i", i]];
}
[comboBox setEditable:NO];
NSAlert *alert = [[NSAlert alloc] init];
[alert addButtonWithTitle:@"Okay"];
[alert addButtonWithTitle:@"Cancel"];
[alert setMessageText:@"Choose a number"];
[alert setAccessoryView:comboBox];
[alert beginSheetModalForWindow:_window modalDelegate:self didEndSelector:@selector(alertToChooseX:returnCode:contextInfo:) contextInfo:nil];
- (void)alertToChooseX:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
if (returnCode == NSAlertFirstButtonReturn) {
NSLog(@"Pressed Okay");
}
}
1 ответ
Решение
Опишите comboBox в вашем заголовочном файле и после нажатия кнопки "Хорошо" примите его значение следующим образом:
в .ч
NSComboBox *comboBox;
в .м
comboBox = [[NSComboBox alloc] initWithFrame:NSMakeRect(0, 0, 150, 26)];
[comboBox setTitleWithMnemonic:@"2"];
.... // Your all code goes here
- (void)alertToChooseX:(NSAlert *)alert returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
if (returnCode == NSAlertFirstButtonReturn) {
NSLog(@"Pressed Okay");
NSLog(@"Selected ComboBox's String Value: %@", [comboBox stringValue]);
NSLog(@"Selected ComboBox's Object Value: %@", [comboBox objectValueOfSelectedItem]);
NSLog(@"Selected ComboBox's Item Index: %ld", [comboBox indexOfSelectedItem]);
}
}
Примечание: не забудьте выпустить comboBox, потому что он выделяет память.