2015-09-07 2 views
0

Я пытаюсь закодировать NSAlert, который появляется, когда некоторые NSTextFields пусты. У меня есть 3 NSTextFields, и я хотел бы иметь NSAlert, который показывает, какой TextField ist пуст в списке. Это возможно для меня для одного текстового поля, но как я могу его закодировать, чтобы в предупреждении появлялись пустые NSTextFields? Если одно текстовое поле пусто в Altert должно стоять, «TextField 1 пуст». Если поля 1 и 2 пустые, должно стоять «TextField 1 is empty», а во второй строке «TextField 2 пуст».Добавить «информативный текст», чтобы оповещать, если текстовые поля пусты.

Вот мой код:

if ([[TextField1 stringValue] length] == 0) { 
    NSAlert* alert = [[NSAlert alloc] init]; 
    [alert addButtonWithTitle:@"OK"]; 
    [alert setMessageText:@"Error"]; 
    [alert setInformativeText:@"TextField 1 is empty"]; 
    [alert beginSheetModalForWindow:[self.view window] completionHandler:^(NSInteger result) { 
     NSLog(@"Success"); 
    }]; 
} 
+1

'NSMutableString * messageText = [[NSMutableString alloc] init]; if ([[TextField1 stringValue] length] == 0) [messageText appendString: @ "Текстовое поле 1 пусто"]; if ([[TextField2 stringValue] length] == 0) [messageText appendString: @ "Текстовое поле 2 пусто"]; // И так далее. if ([messageText length]> 0) // Мы помещаем в него хотя бы одно сообщение) { // Показывать NGAlert с [alert setInformativeText: messageText]; } '? – Larme

+0

@ Larme: Именно! – mangerlahn

ответ

0

Я бы цепочка, если-заявления, чтобы получить желаемый результат. Настройте пустую строку и проверьте каждый textField один за другим. Добавьте строку ошибки в строку, если она пуста. Не забудьте добавить разрыв строки после добавления строки.

Мои слова в коде:

NSString* errorMessage = @""; 

if ([[TextField1 stringValue] length] == 0) { 
    errorMessage = @"TextField 1 is empty.\n"; 
} 

if ([[TextField2 stringValue] length] == 0) { 
    errorMessage = [errorMessage stringByAppendingString:@"TextField 2 is empty.\n"]; 
} 

if ([[TextField3 stringValue] length] == 0) { 
    errorMessage = [errorMessage stringByAppendingString:@"TextField 3 is empty."]; 
} 

if (![errorMessage isEqualToString:@""]) { 
    NSAlert* alert = [[NSAlert alloc] init]; 
    [alert addButtonWithTitle:@"OK"]; 
    [alert setMessageText:@"Error"]; 
    [alert setInformativeText:errorMessage]; 
    [alert beginSheetModalForWindow:[self.view window] completionHandler:^(NSInteger result) { 
     NSLog(@"Success"); 
    }]; 
} 

Таким образом, вы получаете динамический выход в зависимости от NSTextField был пуст.

+0

Большое вам спасибо! Он отлично работает! ;) – Robby

+0

Добро пожаловать! – mangerlahn

1

Вы можете получить информацию автоматически путем уведомления.

  • Назначить метки 1, 2, 3 в текстовые поля.
  • Установите делегат всех текстовых полей в Interface Builder классу, который вы хотите, чтобы отобразить предупреждение в.
  • реализовать этот метод

    - (void)controlTextDidChange:(NSNotification *)aNotification 
    { 
        NSTextField *field = [aNotification object]; 
        if ([[field stringValue] length] == 0) { 
        NSInteger tag = field.tag; 
        NSAlert* alert = [[NSAlert alloc] init]; 
        [alert addButtonWithTitle:@"OK"]; 
        [alert setMessageText:@"Error"]; 
        [alert setInformativeText:[NSString stringWithFormat:@"TextField %ld is empty", tag]]; 
        [alert beginSheetModalForWindow:[self.view window] completionHandler:^(NSInteger result) {NSLog(@"Success");}]; 
        } 
    } 
    
+0

Я этого не пробовал, но разве это не вызвало бы немедленное появление предупреждения? – mangerlahn