2012-01-26 44 views
9

Tôi có một loạt các UITextFields nơi người dùng phải nhập một số (bàn phím là bàn phím số) trước khi nhấn nút gửi. Khi nhấn nút gửi, phương thức "kiểm tra" được gọi là phương thức muốn kiểm tra xem dữ liệu có hợp lệ hay không. Bây giờ điều này sẽ dễ dàng nếu nó chỉ là một textField nhưng tôi có 14. Tôi muốn một câu lệnh if đơn giản để kiểm tra xem một trong các trường hoặc tất cả các trường có trống không ....Cách kiểm tra xem UITextField có trống không?

Tôi có theo dõi UITextFields tuyên bố: number1, number2, number3 etc etc và tôi có các chuỗi theo sau được khai báo có thể lấy giá trị của UITextField.text ... chúng được khai báo: temp1, temp2, temp3, v.v.

làm cách nào tôi đi về làm một giả mã nếu tuyên bố như dưới đây?

Cảm ơn

if (!valid) 
{ 

NSLog (@"not valid) 
} 

else 
{ 
//proceed to next method 
} 

Trả lời

25

Tôi giả sử biến UITextField là * tfield vì vậy, đây là giải pháp

if (tfield.text.length > 0 || tfield.text != nil || ![tfield.text isEqual:@""]) 
{ 
    //do your work 
} 
else 
{ 
    //through error 
} 
+0

Làm thế nào điều này sẽ làm việc vì không phải tất cả các biến UITextField của tôi có thể được đặt tên * tfield?Cảm ơn – Teddy13

+0

textFieldShouldReturn: (UITextField *) tfield sử dụng chức năng ủy nhiệm này nad đặt mã trên vào nó để kiểm tra sau khi người dùng nhấn nút return –

+0

Điều này sẽ được sử dụng && thay thế hoặc || – user1686342

0
you can put like this 


    if(![temp1 isEqualToString:@""] && ![temp2 isEqualToString:@""] ... ![temp14 isEqualToString:@""]) 
    { 
    NSLog (@" valid); 
    } 
    else 
    {NSLog (@"not valid); 
} 
+0

Đó không phải là con đường sai? Nếu tất cả không bằng '@" "' thì nó hợp lệ. – mattjgalloway

+0

có, tôi đã sửa nó –

7

Tôi nghĩ rằng một cái gì đó như thế này là những gì bạn muốn. Nó chỉ sử dụng isEqualToString: để kiểm tra xem chuỗi có trống không.

NSString *temp1 = number1.text; 
NSString *temp2 = number2.text; 
... ///< temp3, etc 

if ([temp1 isEqualToString:@""]) { 
    // temp1 not valid 
} else if ([temp2 isEqualToString:@""]) { 
    // temp2 not valid 
} ... { 
    // temp3, etc 
} else { 
    // Valid 
} 

Bạn có thể muốn cắt ký tự khoảng trắng khi grabbing temp1 để @" " cũng sẽ được để trống. Cho rằng, hãy nhìn vào NSString 's stringByTrimmingCharactersInSet: phương pháp như vậy:

NSString *temp1 = [number1.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

Cập nhật:

Nếu bạn muốn làm điều đó với một mảng bạn có thể làm một cái gì đó như:

NSMutableArray *array = [NSMutableArray arrayWithCapacity:0]; 
[array addObject:number1.text]; 
[array addObject:number2.text]; 
... ///< number3, etc 

BOOL ok = YES; 
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    if ([obj isEqualToString:@""]) { 
     ok = NO; 
     *stop = YES; 
    } 
}]; 

if (ok) { 
    // Valid 
} else { 
    // Not valid 
} 
+0

Cảm ơn nhưng không phải những gì tôi có trong tâm trí ... là có một cách đơn giản hơn như có thể đặt tất cả chúng vào một mảng và sau đó kiểm tra nếu mảng có chứa một chuỗi rỗng? – Teddy13

+0

Không phải điều đó sẽ nhanh hơn nhiều so với việc viết ra điều đó. Bạn sẽ phải lặp qua mảng và xem có bất kỳ chuỗi nào trống không. Phụ thuộc một chút vào số lượng bạn có. – mattjgalloway

+0

@ Teddy13 đã thêm một cách để thực hiện nó nếu bạn thực sự muốn điều đó. – mattjgalloway

1

Something như thế này sẽ lặp qua UITextFields của bạn:

[self.view.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    if ([obj isKindOfClass:[UITextField class]]) { 
    // do your checks 
    } 
}]; 
5

hoặc bạn chỉ có thể gọi

[myTextField hasText]; 

đó sẽ trở lại NO nếu lĩnh vực này là trống.

Các vấn đề liên quan