2010-05-08 22 views
8

Tôi muốn thực hiện một hành động nhất định khi UITextField trống (người dùng xóa tất cả mọi thứ một dấu hiệu khác hoặc sử dụng tùy chọn rõ ràng).Làm thế nào để phát hiện khi nào UITextField trở nên trống

Tôi nghĩ về việc sử dụng hai phương pháp

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; 

- (BOOL)textFieldShouldClear:(UITextField *)textField; 

từ

UITextFieldDelegate 

Tôi không chắc chắn làm thế nào để phát hiện tình trạng này khi lĩnh vực văn bản trở nên trống rỗng? Tôi đã thử với:

if ([textField.text length] == 0) 

nhưng nó does't làm việc như là fisrt các phương pháp trên được gọi là trước dấu sẽ bị xóa khỏi trường văn bản.

Bất kỳ ý tưởng nào?

Trả lời

37
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSRange textFieldRange = NSMakeRange(0, [textField.text length]); 
    if (NSEqualRanges(range, textFieldRange) && [string length] == 0) { 
     // Game on: when you return YES from this, your field will be empty 
    } 
    return YES; 
} 

Nó rất hữu ích để lưu ý rằng lĩnh vực này sẽ không có sản phẩm nào cho đến sau khi phương pháp này lợi nhuận, vì vậy bạn có thể muốn thiết lập một số trạng thái trung gian ở đây, sau đó sử dụng textFieldDidEndEditing: để biết rằng người dùng đang thực hiện đổ ra ruộng .

0

Mã sau cũng hoạt động.

-(void)textfieldDidChange:(UITextField *)textField 

{

if (textField == first) 
{ 

    [second becomeFirstResponder]; 

} 
else if(textField == second) 
{ 
    if (textField.text.length == 0) 
    { 
     [first becomeFirstResponder]; 
    } 
    else 
    { 
     [third becomeFirstResponder]; 
    } 

} 
else if(textField == third) 
{ 
    if (textField.text.length == 0) 
    { 
     [second becomeFirstResponder]; 
    } 
    else 
    { 
     [four becomeFirstResponder]; 
    } 

} 

else if(textField == four) 
{ 
    if (textField.text.length == 0) 
    { 
     [third becomeFirstResponder]; 
    } 
    else 
    { 
     [four becomeFirstResponder]; 
    } 

} 
} 

Added mục tiêu cho mỗi textfield. Đối với tôi, tôi phải đặt con trỏ vào trường trước khi văn bản trống trường văn bản hiện tại. Hãy cho tôi biết nếu bạn cần bất kỳ sự rõ ràng nào.

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