2016-04-26 25 views
2

我在.h文件中的.m文件下viewDidLoad方法添加委託UITextFieldDelegate如何限制爲UITextField在IOS有限的字符

然後:

[self textField:self.comment shouldChangeTextInRange:NSMakeRange(0,10) replacementText:@""]; 

然後添加的功能:

- (BOOL)textField:(UITextField *)textField shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 

    if(textField.text.length >= 10) 
    { 
     return NO; 
    } 

    return YES; 

} 

我的目標是限制鍵盤輸入爲10個字符的文本字段?我做錯了什麼或如何實現?

回答

2

這與退格鍵正確工作,然後複製粘貼&

#define MAXLENGTH 10 
- (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

不要忘記設置UITextField的委託..如果你想設置特定的UITextField,那麼你可以檢查上面的方法,如if(textField ==「youtextfield」){上面的代碼} – PSS

+0

tnx PSS有效 ) – Fay007

0
public func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 

    if(range.length + range.location > textField.text?.characters.count) 
    { 
     return false 
    } 

    let newLength = (textField.text?.characters.count)! + string.characters.count - range.length; 
    return newLength <= self.maximumCharacterAllowed 
} 
0
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

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

使用此代碼

#define KMAX_CHAR_LENGTH 20 
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    if (textField.text.length >= KMAX_CHAR_LENGTH && range.length == 0) { 
     return NO; // do not change text 
    } else { 
     return YES; // Change Text 
    } 
} 
0

使用此代碼:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    // Prevent crashing undo bug – see note below. 
    if(range.length + range.location > textField.text.length) 
    { 
     return NO; 
    } 

    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return newLength <= 25; 
} 
1

刪除或viewDidLoad註釋此行[self textField:self.comment shouldChangeTextInRange:NSMakeRange(0,10) replacementText:@""];

viewDidLoad

添加yourtextfield.delegate = self;和實施以下的委託方法,

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

    //allow back space 
    if (range.length == 0 && [string length] == 0) { 
     return YES; 
    } 

    if(textField.text.length >= 10) 
    { 
     return NO; 
    } 
    else{ 
     return YES; 
    } 
} 

希望,這將有助於:)

+0

TNX獅子,它的工作:)......但現在刪除字符不工作 – Fay007

+0

檢查我更新的答案。只是允許退格:) – Lion

1

首先,你不應該調用的方法「shouldChangeCharactersInRange:明確。當您在self.comment TextFiled中鍵入文本時,此代理方法將會被調用,前提是您已將代理人分配爲:

self.comment.delegate = self. 

您可以在您的xib或.m文件中分配委託。

您在shouldChangeCharactersInRange方法中添加的代碼是正確的,可將輸入掩碼爲10個字符。

希望這會有所幫助。謝謝。