2012-08-11 30 views
0

我想要一個類似於Twitter的文本UITextView「字段」

我目前使用UITextView,因爲它具有多行支持。我有點想出如何使用一個標籤來統計這些字符,並讓用戶瞭解添加或刪除的任何字符的最新狀態。

空:

Empty Field

隨着文字:

With Text

但是我遇到的問題是,當我複製或粘貼在視圖中的任何文本,(例如,如果我想強調所有的文本,如第二張圖片),我刪除它,計數器不會更新。或者,如果我粘貼任何文本,計數只是減少一個字符,儘管文本字段限制仍然保持正確,只是計數器不再與它同步。

代碼:http://pastebin.com/UK91Ccbb

回答

0

沒有爲UITextView的作爲

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text; 

的委託方法它被稱爲每一個字符插入UITextView的時間。在該方法中設置文本的長度在計數器的UILabel如下在方法結束時

counterlabel.text = [NSString stringWithFormat:@"%i", textView.text.length]; 

返回YES如果長度範圍內,即小於或等於140,否則返回NO。

UPDATE: ..
限制爲140個字符。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
    return textView.text.length <= 140; 

} 

在選擇和計算字符時處理文本刪除。

- (void)textViewDidChange:(UITextView *)textView 
{ 
    count.text = [NSString stringWithFormat:@"%i", (140- textView.text.length)]; 
} 
+0

是的,這是如果我想數。我想要做的是相反的。就像,我向他們展示了他們可以擁有的數量,並隨着每個鍵入的字符遞減,並且當X個字符被移除時遞增X。 – 2012-08-11 04:50:10

+0

要處理選擇上的文本刪除,只需實現' - (void)textViewDidChange:(UITextView *)textView'方法並重覆上面的代碼。要顯示剩餘字符,請執行簡單的數學運算並從140中減去textView.text.length。 – tGilani 2012-08-11 04:59:37

+0

有關詳細信息,請參閱更新後的答案。 – tGilani 2012-08-11 05:02:44

0
NSLog(@"You added a character"); 
charactersLeft--; 

我覺得這裏的問題是,你應該寫:

charactersLeft -= text.length; 
+0

是的,我找到了那部分。但我試圖找出如何正確設置字符數,如果我突出顯示一些文本並刪除它,因爲我無法弄清楚。 – 2012-08-11 04:48:24

0

在viewDidLoad中:

charactersLeft = 140; 
characterCountLabel.text = [NSString stringWithFormat:@"%d",charactersLeft]; 

現在使用它工作得很好:

- (void)textViewDidChange:(UITextView *)textView{ 

NSString *textString = textView.text; 
int chars = [textString length]; 

if (chars <= 140) { 
    [characterCountLabel setText:[NSString stringWithFormat:@"%d",(140 - chars)]]; 
} 
} 

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 
{ 
if([text isEqualToString:@"\n"]) 
    [textView resignFirstResponder]; 

if (textView.text.length == 140 && [text isEqualToString:@"\n"]) { 

    [textView resignFirstResponder]; 
} 

else if ((textView.text.length) >= 140 && range.length == 0){ 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"You have exceeded the characters limit." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    return NO; // return NO to not change text 

} 

return YES; 

}

請注意,在這裏我使用了returnType鍵來退出鍵盤。您可以將其更改爲照常工作。