回答
這與退格鍵工作正常,並複製&粘貼:
#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;
}
UPDATE :更新爲即使在MAXLENGTH時也接受返回鍵。謝謝羅傑斯先生!
UPDATE
,因爲它是公認的,但它是不正確的,我不能刪除這個答案。下面是正確的代碼,請從下方托馬複製:
#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;
}
ORIGINAL
我想你指的UITextField。如果是的話,那麼有一個簡單的方法。
- 貫徹UITextFieldDelegate協議
- 貫徹
textField:shouldChangeCharactersInRange:replacementString:
方法。
該方法在每個字符敲擊或前一個字符替換時被調用。在這種方法中,你可以這樣做:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField.text length] > MAXLENGTH) {
textField.text = [textField.text substringToIndex:MAXLENGTH-1];
return NO;
}
return YES;
}
我認爲沒有這樣的屬性。
但是,您分配給UILabel的文本必須是NSString。你這個字符串分配給UILabel的文本屬性纔可以例如使用NSString以下方法給定索引(你最大長度)在裁剪的字符串:
- (NSString *)substringToIndex:(NSUInteger)anIndex
不幸的是,問題提問者改變了他們的問題,你回答後,讓你的答案不再讓任何意義:( – JosephH
更好的功能,正確和限制處理退格提供長度限制的字符如下:
#define MAXLENGTH 8
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
int length = [textField.text length] ;
if (length >= MAXLENGTH && ![string isEqualToString:@""]) {
textField.text = [textField.text substringToIndex:MAXLENGTH];
return NO;
}
return YES;
}
乾杯!
我覺得這個代碼會做的伎倆:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString*)string
{
if (range.location >= MAX_LENGTH)
return NO;
return YES;
}
與此委託方法可以防止用戶超過MAX_LENGTH更多的字符添加到您的文本字段,用戶應該被允許進入退格鍵如果需要的話。
這並不完全覆蓋用戶粘貼的情況;它允許字符串變得太長。當用戶超過1 – JosephH
這類似於coneybeare的答案,但現在的文本字段最多可包含MAXLENGTH符號:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField.text length] > MAXLENGTH - 1) {
textField.text = [textField.text substringToIndex:MAXLENGTH];
return NO;
}
return YES;
}
這其中並不妨礙長度會超過最大。比公認的好。 – Shebuka
對我來說這確實神奇:
if (textField.text.length >= 10 && range.length == 0)
return NO;
return YES;
您需要在ViewDidLoad
TextFieldname.delegate=self
這不是一個完整的答案。代表的實施將更加有趣。 –
我這是怎麼解決這個問題分配委託。當達到最大限制它不會嘗試添加更多...你將只能刪除字符
(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textfield.text length] > MAX_SIZE && ![string isEqualToString:@""]) {
return NO;
}
}
你必須要知道的文本將放在以及文本存在的長度位置添加(以防他們粘貼多個字符)。這些關於最大長度的模式是它們的總和不應超過最大長度。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSInteger locationAndStringLengthSum = range.location + [string length];
if ([textField isEqual:_expirationMonthField]) {
if (locationAndStringLengthSum > EXP_MONTH_FIELD_MAX_CHAR_LENGTH) {
return NO;
}
}
else if ([textField isEqual:_expirationYearField]) {
if (locationAndStringLengthSum > EXP_YEAR_FIELD_MAX_CHAR_LENGTH) {
return NO;
}
}
else if ([textField isEqual:_securityCodeField]) {
if (locationAndStringLengthSum > SECURITY_FIELD_MAX_CHAR_LENGTH) {
return NO;
}
}
else if ([textField isEqual:_zipCodeField]) {
if (locationAndStringLengthSum > ZIP_CODE_MAX_CHAR_LENGTH) {
return NO;
}
}
return YES;
}
此代碼限制文本,同時還允許您輸入字符或粘貼到文本的任何位置。如果結果文本太長,它會更改範圍內的字符,並將結果文本截斷到極限。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSUInteger newLength = [textField.text length] - range.length + [string length];
if (newLength >= MAXLENGTH) {
textField.text = [[textField.text stringByReplacingCharactersInRange:range withString:string] substringToIndex:MAXLENGTH];
return NO;
}
return YES;
}
- 1. 設置自定義UITextField最大長度
- 2. 設置最大長度
- 3. 設置最大長度爲<TD>
- 4. 設置EditText的最大長度
- 5. 設置Textarea的最大長度
- 6. 如何設置最大標籤長度?
- 7. 在gridview中設置最大長度
- 8. 設置WPF中DataGridTextBoxColumn的最大長度
- 9. jQuery - 爲textarea設置最大長度
- 10. 在Jetty中設置最大URL長度
- 11. 如何在最大長度下設置休眠列的長度
- 12. 設置爲UITextField到最大使用NSNumberFormatter
- 13. 將最大容量設置爲UITextField
- 14. 設置最大。大小,最大整型數和最大字符串長度
- 15. 最大長度
- 16. 設置最大和最小修剪長度IOS
- 17. 設置兩個不同UITextfields的最小和最大長度
- 18. Java Hibernate設置最小和最大列長度
- 19. 設置Zend ValidatorRules的最大和最小字符串長度
- 20. TinyMce設置最大寬度
- 21. NSURL最大長度?
- 22. CSS最大長度
- 23. UITextView最大長度
- 24. 最大URL長度
- 25. CString最大長度
- 26. 最大NVARCHAR長度
- 27. 與最大長度
- 28. BindingSource.Filter最大長度
- 29. TextArea最大長度?
- 30. JAVA_TOOL_OPTIONS最大長度
這個答案是偉大的粘貼一串更長 –
這個答案是唯一一個當用戶試圖粘貼一個長字符串時真正起作用的答案。請注意! – JosephH
+1,代碼非常清晰。 – PEZ