2012-02-04 64 views
6

我一直在寻找解决方案,并找到下面的一段代码。但不幸的是,我不知道如何使用它。如何限制UITextView中的字符?

- (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? 或者我完全错了吗?

+1

这是一个委托方法 - 阅读UITextView及其协议的文档。 – Till 2012-02-04 21:16:26

回答

11

checkIfCorrectLength:调用textView:shouldChangeTextInRange:replacementText:没有意义。如果你想测试从多种方法的长度,因素测试出到它自己的方法:

- (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 
    } 
} 
+0

谢谢,为我工作:) – 2012-02-04 21:49:59

1

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

2

嗨我在这里找到并修改了代码。所以对于Xamarin用户。请尝试以下操作:

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

    return true; 
} 
0

如果当前对象是文本视图的代表,那么你可以使用下面的代码片段:

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

这为我工作。

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; 

}