我试图限制用户在UITextView中输入最多50个单词。我尝试了PengOne的解决方案question1。这对我有用,除非用户可以在最后一个单词中输入无限制的字符。
所以我想到了使用正则表达式。我使用的是正则表达式 这个question2中的VonC。但这不允许我在文本视图中输入特殊符号,如“@”。
在我的应用中,用户可以在UITextView中输入任何内容,或者只是从网页,笔记,电子邮件等中复制粘贴。
任何人都可以知道任何替代解决方案吗?
提前致谢。
答案 0 :(得分:3)
此代码应该适合您。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
return textView.text.length + (text.length - range.length) <= 50;
}
答案 1 :(得分:0)
按照“问题2”中的建议操作,但在括号内添加@,以便您也可以输入。如果有人将它视为一个特殊的角色,可能需要逃脱它。
答案 2 :(得分:0)
您使用[NSCharacterSet whitespaceCharacterSet]
来计算单词。
- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
static const NSUInteger MAX_NUMBER_OF_LINES_ALLOWED = 3;
NSMutableString *t = [NSMutableString stringWithString: self.textView.text];
[t replaceCharactersInRange: range withString: text];
NSUInteger numberOfLines = 0;
for (NSUInteger i = 0; i < t.length; i++) {
if ([[NSCharacterSet whitespaceCharacterSet] characterIsMember: [t characterAtIndex: i]]) {
numberOfWord++;
}
}
return (numberOfWord < 50);
}
当选择一段文本或更改选择时,例如复制或粘贴一段文本时,将调用方法textViewDidChangeSelection:
。