2012-02-04 67 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; 

}