如何获取UITextView中显示的字符串的计数/长度?

时间:2014-02-14 10:29:31

标签: ios iphone ipad ios7 uitextview

我已经在不同的文本视图中显示了一个大文本。所以我已将整个文字内容设置为NSTextContainer。然后添加了NSLayoutManager。为不同的UITextViews创建了NSTextContainers。我在不同的TextViews中得到了连续的文字。但是我不能使用条件来限制文本视图的数量。

我的问题是我想创建与内容相关的文本视图。内容可能会有所不同。我试图创建一个条件bw全文内容& textview的内容。但即使每个文本包含不同的文本,所有textview.text length都返回与整个文本内容的长度相同的值!!!!

以下是代码>>

-(void)paginate:(NSString*)chapterData WithSize:(CGRect)frame
{
    int stringLength,totalTextViewsTextLength;
    totalTextViewsTextLength=0;


    NSString* htmlString = [NSString stringWithContentsOfFile:chapterData encoding:NSUTF8StringEncoding error:nil];

    NSAttributedString *temp=[[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:nil error:nil];


    NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:temp];
    NSLayoutManager *textLayout = [[NSLayoutManager alloc] init];
    [textStorage addLayoutManager:textLayout];

    stringLength=[temp length];


    while (totalTextViewsTextLength<stringLength)               // checks whether all the content has been added to textview or not
    {

        NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:frame.size];
        [textLayout addTextContainer:textContainer];

//        textContainer.lin
        UITextView *textView=[[UITextView alloc]initWithFrame:frame textContainer:textContainer];
        textView.tag=textviewCount;



        // Store textviews in array
        [pagedData addObject:textView];


        totalTextViewsTextLength+=[textView.text length];
        textviewCount++;

    }

}

我需要的是获取每个textview中显示的文本长度(包含不同的textcontainers)??????

4 个答案:

答案 0 :(得分:1)

我告诉你究竟是什么,你想要的。 你有修复文本视图的高度,在这个textView你要设置文本,对吧?如果正确,则使用以下方法:

假设您的textView高度为450

1,计算要在textView

中显示的文本的高度

这里ft是你的字体大小,UIFont * ft = [UIFont systemFontOfSize:12.0];

 CGSize expectedSize = [textview.text sizeWithAttributes:@{NSFontAttributeName:ft}];

    float height= 0; 

    height = expectedLabelSize.height 

2,检查textView的高度以及要在textView

中显示的文本
if(height > 'your textview height') 
 {
     // add you code here 
 } 

答案 1 :(得分:0)

获取可见字符的数量首先使用此答案ios - how to find what is the visible range of text in UITextView?中的代码,然后获取length的{​​{1}}

答案 2 :(得分:0)

要在textview中使用文本的长度:

 int textLength = [someTextView.text length]

要获得不包括空格的长度,请使用:

  int textLength= [someTextView.text  stringByTrimmingCharactersInSet:
                         [NSCharacterSet whitespaceAndNewlineCharacterSet]]length]; 

更新要在输入每个字符后获取长度,您必须使用以下方法编写代码

这将调用您键入的每个字符。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{   
  NSUInteger textLength = [textField.text length];
  NSLog(@"Textfield Length :%ld",textLength);
  return YES;
}

答案 3 :(得分:-2)

使用以下方式,在将文本设置为textview之前,检查字符串的长度:

NSString *textEntered = [[[textview.text copy] autorelease] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

if([textEntered length] > 450) {
                UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Message" message:kMoreThan450CharactersForQuestion delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [alertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];
                [alertView release];
            }