回答
这与退格键工作正常,并复制&粘贴:
#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