如何限制UITextView中的字符?

时间:2012-02-04 21:14:12

标签: iphone objective-c ios uitextview character

我一直在寻找解决方案并找到了以下代码。但不幸的是,我不知道如何使用它。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string {
        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        return (newLength > 25) ? NO : YES;
    }

仅出于测试目的,我设置了IBACTION

-(IBAction)checkIfCorrectLength:(id)sender{
    [self textView:myTextView shouldChangeTextInRange: ?? replacementText: ?? ];

}

我为shouldChangeTextInRangereplacementText传递了什么? 或者我完全错了?

5 个答案:

答案 0 :(得分:11)

textView:shouldChangeTextInRange:replacementText:拨打checkIfCorrectLength:没有意义。如果要从多种方法测试长度,请将测试分解为自己的方法:

- (BOOL)isAcceptableTextLength:(NSUInteger)length {
    return length <= 25;
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)string {
    return [self isAcceptableTextLength:textField.text.length + string.length - range.length];
}

-(IBAction)checkIfCorrectLength:(id)sender{
    if (![self isAcceptableTextLength:self.textField.text.length]) {
        // do something to make text shorter
    }
}

答案 1 :(得分:2)

您好我在这里找到并修改了代码。所以对于xamarin用户。尝试以下方法:

textView.ShouldChangeText += delegate
{
   if(textView.Text.Length > 159) // limit to one sms length
   {
      return false;
   }

   return true;
}

答案 2 :(得分:1)

您不会自己调用此方法,文本视图会在要更改其文本时调用它。只需设置文本视图的delegate属性(例如,设置到视图控制器)并在那里实现该方法。

答案 3 :(得分:0)

如果当前对象是文本视图的委托,那么您可以使用以下代码段:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    return weightTextView.text.length + text.length - range.length < 7;
}

这对我有用。

答案 4 :(得分:0)

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if([text length] == 0)
{
    if([textView.text length] != 0)
    {
        return YES;
    }
    else {
        return NO;
    }
}
else if([[textView text] length] > your limit value ) 
{
    return NO;
}
return YES;

}