如何在UITextView中实现简单的"实时"字数

n.e*_*ind 13 iphone cocoa-touch objective-c uitextview

我正在尝试在用户输入文本时实现UITextView的简单字符数(即它应该连续更新).

我有两个问题.

(1)首先是我不知道我应该在哪种方法中使用charCount方法.textViewShouldBeginEditing不起作用,因为它只是询问编辑会话是否应该开始.textView:shouldChangeTextInRange也不起作用,因为它再次询问是否允许开始编辑.我在Apple doc中找不到其他有用的方法.

(2)下一个问题:我试图从另一个方法中调用我的charCount方法.但是我得到了编译错误:'ViewController'可能无法响应'charCount'.

这是我的谦卑尝试:

- (IBAction)charCount:(id)sender {

// all chars
int charsAsInt = (int)(textView.text.length);
NSString *newText = [[NSString alloc] initWithFormat:@"All chars: %d", charsAsInt];
allCharacters.text = newText;
[newText release];}

- (BOOL)textViewShouldBeginEditing:(UITextView *)aTextView {

    [self charCount];}
Run Code Online (Sandbox Code Playgroud)

我想这与我试图调用IBAction定义的方法有关,这不起作用.但是,在非IBAction方法中调用IBAction方法的正确方法是什么?

一如既往,我很抱歉这些非常基本的问题,我非常感谢每一个小小的帮助,让我的初学者能够理解这一点.

Sur*_*h.D 50

我曾经这样创建,以防止UITextview只键入140个字符.
而且我在UILabel中显示出这样的数字

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

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if([text length] == 0)
    {
        if([textView.text length] != 0)
        {
            return YES;
        }
    }
    else if([[textView text] length] > 139)
    {
        return NO;
    }
    return YES;
} 
Run Code Online (Sandbox Code Playgroud)

这可能对你有所帮助!

  • 你在视图中禁用了粘贴吗?如果不是,那么获得超过140个字符非常容易.选择1个字符并根据需要粘贴尽可能多的文本. (2认同)

Mat*_*uch 6

textView:shouldChangeTextInRange也不起作用,因为它再次询问是否允许开始编辑.

但没有什么可以阻止你计算那里的人物.最后只返YES.

我想这与我试图调用IBAction定义的方法有关,这不起作用

您可以从代码中调用IBActions.IBAction只是Interface Builder的关键词,但它与void相同.

但是你必须使用正确的方法签名.
您的方法- (IBAction)charCount:(id)sender有一个参数(id sender)
但您的调用[self charCount]没有参数.

改变它[self charCount:nil],你应该没事.


编辑:我现在没有textView,我现在懒得创建一个但是这适用于UITextField:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSInteger textLength = 0;
    textLength = [textField.text length] + [string length] - range.length;
    NSLog(@"Length: %d", textLength);
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

我将替换字符串的长度添加到字段的当前文本中.然后我减去更换范围的长度.
你应该做一些实验来更好地理解那些之间的关系3.
基本上,如果你覆盖一些文本,范围的长度将是你要覆盖的文本的长度(即所选文本的长度)