Проверка трех полей UIText для данных, затем выполнение действия - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть фрагмент кода, в котором я хотел бы взять три NSString с (которые получены из 3 отдельных UITextField с) и добавить их вместе, чтобы создать дату в UILabel:

-(IBAction)numberEntered:(id)sender
{ 
    if (dayEntry != nil && monthEntry !=nil && yearEntry !=nil){
        NSString *day=[NSString stringWithFormat:@"%@/%@/%@", dayEntry, monthEntry,       yearEntry];
        [dateOutput setText: day];
    }
}

По сути, я хочу, чтобы оператор if проверял, чтобы во все текстовые поля были введены данные, прежде чем он выполнит строку кода [dateOutput setText: Day].

В данный момент он действует, как только я вхожучисло в первом UITextField (т. е. dayEntry).

Действие вызывается на каждом UILabel с помощью «Editing Did End».

1 Ответ

0 голосов
/ 07 февраля 2012

Когда текстовые поля не заполнены, переменные NSString будут содержать пустое строковое значение (не nil), которое является строкой нулевой длины.

Вместо этого вы должны проверить length строк.(Даже если переменные NSString равны nil, вызов length для них вернет 0 вместо сбоя.)

Поэтому измените условие if на:

if ((dayEntry.length > 0) 
     && (monthEntry.length > 0) 
     && (yearEntry.length > 0))

Если вы также хотите обработать случай, когда строки содержат только пробел (например, если пользователь вводит один пробел в текстовом поле), тогда вам сначала нужно будет обрезать пробел, а затем проверить length:

NSCharacterSet *ws = [NSCharacterSet whitespaceCharacterSet];

if (([dayEntry stringByTrimmingCharactersInSet:ws].length > 0)
    && ([monthEntry stringByTrimmingCharactersInSet:ws].length > 0)
    && ([yearEntry stringByTrimmingCharactersInSet:ws].length > 0))
...