0

我想要一个类似于 Twitter 的文本

我目前正在使用 UITextView,因为它具有多行支持。我有点想出如何使用一个标签来计算字符并让用户了解添加或删除的任何字符的最新信息。

空的:

空字段

带文字:

带文字

但是,我遇到的问题是,当我在视图中复制或粘贴任何文本时(例如,如果我突出显示所有文本,如第二张图片所示)并删除它,计数器将不会更新。或者如果我粘贴任何文本,计数只会减少一个字符,尽管文本字段限制仍然保持正确,只是计数器不再与其同步。

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

4

3 回答 3

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 键来退出键盘。您可以将其更改为照常工作。

于 2012-08-11T05:21:36.423 回答
0

UITextView 有一个委托方法

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

每次将字符插入 UITextView 时都会调用它。在此方法中,设置计数器 UILabel 中的文本长度如下

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

如果长度在范围内,即小于或等于 140,则在方法结束时返回 YES,否则返回 NO。

更新: ..
限制为 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)];
}
于 2012-08-11T04:42:31.450 回答
0
NSLog(@"You added a character");
charactersLeft--;

我认为这里的问题是你应该写:

charactersLeft -= text.length;
于 2012-08-11T04:45:21.353 回答