【问题标题】:Is there a way to limit the width of text in UITextView有没有办法限制 UITextView 中文本的宽度
【发布时间】:2013-02-10 06:23:17
【问题描述】:

我有 UITextView,我需要在其中控制文本的开始和结束位置。

这是因为我使用气泡作为 UITextView 的背景图片,我需要在气泡图片中显示文本。

到目前为止,我已经能够控制文本开始使用的位置:

self.contentOffset = (CGPoint){.x = -10, .y = -10};

但我不知道如何控制文本结束的位置。目前,默认情况下它使用所有 UITextView 宽度。

【问题讨论】:

    标签: objective-c cocoa-touch nsstring size uitextview


    【解决方案1】:

    随着文本的拉伸,气泡会变高吗?还是将气泡限制在 1 行?不管怎样,我认为你应该使用不同的方法来处理这个问题。

    在 NSString 实例上使用 -sizeWithFont:constainedToSize:lineBreakMode: 来确定文本的大小。如果大小大于您允许的值,请停止允许输入(如果这是您的目标)或增加气泡的高度并允许文本在下一行继续。

    您通常会在文本输入时执行这些重新计算,这意味着您将根据上述建议实现 UITextViewDelegate 方法-textView:shouldChangeTextInRange:replacementText:

    -- 或--

    仅限制 textView 的大小并设置 lineBreakMode 和 numberOfLines 也可能足以满足您的目的。

    【讨论】:

      【解决方案2】:

      define #define TEXT_LENGTH 25 // 你的限制是什么

      每当用户键入新字符或删除现有字符时,UITextView 都会调用此方法。

      - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
      {
          NSUInteger newLength = (textView.text.length - range.length) + text.length;
          if(newLength <= TEXT_LENGTH)
          {
              return YES;
          } else {
              NSUInteger mySpace = TEXT_LENGTH - (textView.text.length - range.length);
              textView.text = [[[textView.text substringToIndex:range.location] 
                                                  stringByAppendingString:[text substringToIndex: mySpace]]
                                               stringByAppendingString:[textView.text substringFromIndex:(range.location + range.length)]];
              return NO;
          }
      }
      

      在方法中使用replacementText 而不是replacementString,所以要注意replacementString 和replacementText 之间的区别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 1970-01-01
        • 2012-05-22
        • 1970-01-01
        • 2019-08-18
        • 2021-10-26
        • 1970-01-01
        相关资源
        最近更新 更多