2015-04-21 13 views
5

Tôi chỉ muốn biết cách giới hạn phạm vi uitextfield, tức là tôi có một hộp văn bản để nhập giá trị 10 chữ số. Nếu tôi cố gắng nhập hơn 10 chữ số, trường văn bản của tôi sẽ không chấp nhận các giá trị. Để rất đơn giản, tôi chỉ muốn nhập 10 chữ số vào trường văn bản.cách giới hạn phạm vi ký tự uitextfield tối đa 10 chữ số

tôi làm việc ra mã này, nhưng nó không làm việc cho tôi:

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

NSUInteger oldLength = [textField.text length]; 
NSUInteger replacementLength = [string length]; 
NSUInteger rangeLength = range.length; 

NSUInteger newLength = oldLength - rangeLength + replacementLength; 

BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound; 

return newLength <= MAXLENGTH || returnKey; 
    } 
+1

thể trùng lặp của [Đặt độ dài ký tự tối đa của một UITextField] (http://stackoverflow.com/questions/433337/set-the-maximum-character-length-of-a-uitextfield) – Apoorv

+0

[This] [1] là giải pháp tốt nhất Tôi đã tìm thấy. http://stackoverflow.com/questions/433337/set-the-maximum-character-length-of-a-uitextfield [1]: http://stackoverflow.com/questions/433337/set-the-max-character-length-of-a-uitextfield – Kaey

Trả lời

0

tôi đã xây dựng một lớp con thực sự tốt đẹp của UITextField để hạn chế số ký tự đầu vào thành một lĩnh vực. Dưới đây bạn đi !:

public class NumberFormattedTextField : UITextField { 
    @IBInspectable public var maximumCharacters = 10 { 
     didSet { 
      format() 
     } 
    } 

    public override func awakeFromNib() { 
     format() 
     addTarget(self, action: "format", forControlEvents: .EditingChanged) 
    } 

    func format() { 
     let len = text.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) 
     // truncate for max characters if needed 
     if len > maximumCharacters { 
      text = text[1...maximumCharacters] // pulls in the last entered character and drops the first one off to preserve length 
     } 
    } 
} 

Điều này phụ thuộc vào chỉ số cho String. Dưới đây là điều đó quá:

public extension String { 
    public subscript (r: Range<Int>) -> String? { 
     let l = self.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) 
     if r.startIndex <= l && r.endIndex <= l { 
      return substringWithRange(Range(start: advance(startIndex, r.startIndex), end: advance(startIndex, r.endIndex))) 
     } else { 
      return nil 
     } 
    } 
} 
10

Để hạn chế chiều dài một đầu vào văn bản của thực hiện phương pháp này UITextFieldDelegate và kiểm tra chiều dài của văn bản sau khi thay đổi:

- (BOOL)   textField:(UITextField *)textField 
shouldChangeCharactersInRange:(NSRange)range 
      replacementString:(NSString *)string { 
    NSString *resultText = [textField.text stringByReplacingCharactersInRange:range 
                    withString:string]; 
    return resultText.length <= 10; 
} 
+0

Làm tốt người đàn ông trẻ !!! Upvoted .. – NSPratik

2

Hãy thử bên dưới mã được giới hạn trong 10 văn bản kỹ thuật số.

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

     NSInteger length = [textField.text length]; 
     if (length>9 && ![string isEqualToString:@""]) { 
      return NO; 
     } 

     // This code will provide protection if user copy and paste more then 10 digit text 

     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
      if ([textField.text length]>10) { 
       textField.text = [textField.text substringToIndex:10]; 

      } 
     }); 


     return YES; 
    } 

Hy vọng điều này sẽ giúp bạn.

+0

Lý do để kiểm tra điều này:! [String isEqualToString: @ ""]? – ninjaproger

+0

nó sẽ cho phép chỉnh sửa một khi bạn nhấp chuột backspace. có nghĩa là sau khi thêm 10 chữ số của nó được phép chỉnh sửa các chữ số đó –

+1

Nó là thông minh để cho phép người dùng dán một chuỗi lớn và sau đó cắt nó. Có thể có ích đấy. Cảm ơn bạn đã tiếp cận. –

1

Hãy thử điều này.

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 
if(range.length + range.location > textField.text.length) 
{ 
    return NO; 
} 

NSUInteger newLength = [textField.text length] + [string length] - range.length; 
return (newLength > 10) ? NO : YES;} 
1

Bạn có thể sử dụng điều này ... tôi hy vọng nó sẽ giúp bạn/

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    { 
     int lenght1 = code.text.length - range.length + string.length; 
    if (textField.text.length >= 4 && range.length == 0) 
      return NO; 
2

Swift 3 Version

func textField(_ textField: UITextField, shouldChangeCharactersIn range:NSRange, replacementString string: String) -> Bool 
    { 
     let currentCharacterCount = textField.text?.characters.count ?? 0 
     if (range.length + range.location > currentCharacterCount){ 
      return false 
     } 
     let newLength = currentCharacterCount + string.characters.count - range.length 
     return newLength <= 10 
    } 
3

Trong Swift 3,0

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 

    let charsLimit = 10 

    let startingLength = textField.text?.characters.count ?? 0 
    let lengthToAdd = string.characters.count 
    let lengthToReplace = range.length 
    let newLength = startingLength + lengthToAdd - lengthToReplace 

    return newLength <= charsLimit 
} 
0

Tôi đã xây dựng một lớp con dựa trên câu trả lời được đưa ra bởi Oxcug mà không cần tạo một phần mở rộng trong chuỗi tập tin và thời gian ký tự tối đa có thể được thiết lập từ kịch bản và từ tập tin nhanh chóng cũng .:

@IBDesignable class CustomTextField: UITextField { 
    @IBInspectable var maximumCharacters: Int = 80 { 
     didSet { 
      limitCharacters() 
     } 
    } 
    override func awakeFromNib() { 
     super.awakeFromNib() 
     limitCharacters() 
     addTarget(self, action: #selector(CustomTextField.limitCharacters), for: .editingChanged) 
    } 

    func limitCharacters() { 
     guard text != nil else { 
      return 
     } 
     if (text?.characters.count)! > maximumCharacters { 
      if let range = text?.index(before: (text?.endIndex)!) { 
       text = text?.substring(to: range) 
      } 
     } 
    } 
} 
Các vấn đề liên quan