java textfield长度_设置UITextField的最大字符长度

这篇博客讨论了在iOS开发中如何限制UITextField的最大字符数。提供了多种方法,包括在代理方法`textField:shouldChangeCharactersInRange:replacementString:`中进行判断,以及处理剪贴板粘贴情况,以防止输入超过预设的最大长度。示例代码展示了如何根据需求动态调整不同输入字段的最大长度。
摘要由CSDN通过智能技术生成

加载UIView时,如何在iPhone SDK的UITextField设置最大字符数?

#1楼

这应该足以解决问题(将4替换为您想要的限制)。 只要确保在IB中添加委托即可。

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

{

NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

return (newString.length<=4);

}

#2楼

通常,您有多个长度不同的输入字段。

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

int allowedLength;

switch(textField.tag) {

case 1:

allowedLength = MAXLENGTHNAME; // triggered for input fields with tag = 1

break;

case 2:

allowedLength = MAXLENGTHADDRESS; // triggered for input fields with tag = 2

break;

default:

allowedLength = MAXLENGTHDEFAULT; // length default when no tag (=0) value =255

break;

}

if (textField.text.length >= allowedLength && range.length == 0) {

return NO; // Change not allowed

} else {

return YES; // Change allowed

}

}

#3楼

为了使它可以剪切和粘贴任何长度的字符串,我建议将函数更改为:

#define MAX_LENGTH 20

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

{

NSInteger insertDelta = string.length - range.length;

if (textField.text.length + insertDelta > MAX_LENGTH)

{

return NO; // the new string would be longer than MAX_LENGTH

}

else {

return YES;

}

}

#4楼

其他答案不能解决用户可以从剪贴板粘贴长字符串的情况。 如果我粘贴了一个长字符串,则应该将其截短但要显示出来。 在您的代表中使用此命令:

static const NSUInteger maxNoOfCharacters = 5;

-(IBAction)textdidChange:(UITextField * )textField

{

NSString * text = textField.text;

if(text.length > maxNoOfCharacters)

{

text = [text substringWithRange:NSMakeRange(0, maxNoOfCharacters)];

textField.text = text;

}

// use 'text'

}

#5楼

虽然UITextField类没有max length属性,但是通过设置文本字段的delegate并实现以下委托方法来获得此功能相对简单:

目标C

- (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;

}

迅速

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

let currentCharacterCount = textField.text?.count ?? 0

if range.length + range.location > currentCharacterCount {

return false

}

let newLength = currentCharacterCount + string.count - range.length

return newLength <= 25

}

在文本字段更改之前,UITextField询问委托是否应更改指定的文本。 此时,文本字段尚未更改,因此我们将获取当前长度和要插入的字符串长度(通过粘贴复制的文本或使用键盘键入单个字符)减去范围长度。 如果此值太长(在此示例中,该长度超过25个字符),则返回NO以禁止更改。

在文本字段的末尾键入单个字符时, range.location将是当前字段的长度,而range.length将是0,因为我们没有替换/删除任何内容。 插入文本字段的中间仅表示不同的range.location ,而粘贴多个字符仅表示string包含多个字符。

删除单个字符或剪切多个字符由长度不为零的range和空字符串指定。 替换只是使用非空字符串的范围删除。

关于崩溃的“撤消”错误的说明

如评论中所述, UITextField存在一个错误,可能导致崩溃。

如果您粘贴到该字段中,但是您的验证实现阻止粘贴,则粘贴操作仍会记录在应用程序的撤消缓冲区中。 如果随后触发撤消操作(通过摇动设备并确认撤消操作),则UITextField将尝试用空字符串替换它认为粘贴至其自身的字符串。 这将崩溃,因为它从未真正将字符串粘贴到自身中。 它将尝试替换不存在的字符串的一部分。

幸运的是,您可以像这样保护UITextField避免杀死自己。 您只需要确保它建议替换的范围确实存在于当前字符串中即可。 这就是上面的初始完整性检查所做的。

迅速3.0与复制和粘贴工作正常。

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

let str = (textView.text + text)

if str.characters.count <= 10 {

return true

}

textView.text = str.substring(to: str.index(str.startIndex, offsetBy: 10))

return false

}

希望对您有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值