NSString UITextView无需替换以前的文本

时间:2012-01-31 02:30:38

标签: iphone ios nsstring uitextview

如何在不替换之前的文字的情况下向UITextView添加文字?

到目前为止,我有UITextViewUIButton将文本添加到UITextView,但我希望每次按下按钮时文本字段都附加更多文字完全删除文本并替换它。

4 个答案:

答案 0 :(得分:12)

以下是克服iOS开发障碍的一些方法:

  1. 查看您尝试操作的特定类的文档。在这种情况下,可以在Xcode或online中找到UITextView文档。

  2. 命令 - 单击代码中任意位置的UITextView或任何其他对象,它将带您进入该类的头文件。头文件将列出每个公共方法和属性。

  3. 查看您现有的代码。我假设因为你有一个向UITextView添加文本的按钮,你就会明白如何设置它的文本。 99%的时间你会发现任何setter(mutator)方法都有相应的getter(访问器)方法。在这种情况下,UITextView有一个名为setText:的方法和一个名为text的匹配方法。

  4. 最后,NSString有一个称为stringWithFormat:的便捷方法,您可以使用它来连接(连接)两个字符串,以及其他非常有用的东西。 %@是字符串的格式说明符。例如,要合并两个字符串stringOnestringTwo,您可以执行以下操作:

    NSString *string = [NSString stringWithFormat:@"%@ %@", stringOne, stringTwo];

    我会告诉您如何合并NSString stringWithFormat:UITextField textsetText:来实现您的目标。我想完成。


    修改 OP无法弄清楚如何利用上述信息,因此下面提供了完整的代码示例。

    假设您已初始化名为IBOutlet的合成属性(可能是UITextViewmyTextView。还假设当您点按IBAction时,我们目前处于被调用方法的方法范围内(如果您使用IB,则为UIButton

    [myTextView setText:[NSString stringWithFormat:@"%@ %@", myTextView.text, @"this is some new text"]];
    

    说明:myTextView.text抓取UITextView内的现有文本,然后您只需追加您想要的任何字符串。因此,如果文本视图最初填充了文本“Hello world”并且您单击了该按钮三次,则最终会得到以下进展:

    初始字符串:@“Hello world”
    点击一下:@“Hello world这是一些新文字”
    点击二:@“Hello world这是一些新文本,这是一些新文本”
    点击三:@“Hello world这是一些新文本,这是一些新的文本文本,这是一些新文本”

答案 1 :(得分:2)

如果你所做的只是附加文字,你可能会发现这更简单:

myTextView.text = [myTextView stringByAppendingString:@"suffix\n"];

我在UITextView insert text in the textview text找到了这个。遗憾的是,我还没有找到一种直接附加文本的方法,而无需在UITextView中批量替换文本。让我感到困惑的是,所涉及的工作量与现有字符串和后缀的总长度成正比,而不仅仅是后缀。

答案 2 :(得分:2)

更有效的附加文字方式是在最后使用replace()

extension UITextInput {
  func append(_ string : String) {
    let endOfDocument = self.endOfDocument
    if let atEnd = self.textRange(from: endOfDocument, to: endOfDocument) {
      self.replace(atEnd, withText: string)
    }
  }
}

答案 3 :(得分:1)

@Jack Lawrence:你的回答并没有完全涵盖这个问题。

以下示例在每秒调用时从底部运行时不会整齐滚动:

self.consoleView.text = [NSString stringWithFormat:@"%@%@%@", self.consoleView.text, data, @"\n"];
[self.consoleView scrollRangeToVisible:NSMakeRange(self.consoleView.text.length, 0)];

这是由setText每次替换原始文本从而重置关联的contentOffsets等引起的。

这在iOS 7之前是可能的,但是从iOS 7开始,似乎无法阻止setText表现出跳跃行为。在这种情况下,附加似乎不是TextView的选项吗?