如何在不替换之前的文本的情况下向UITextView
添加文本?
到目前为止,我有一个UITextView
和一个UIButton
,可以将文本添加到UITextView
中,但是我希望每次单击按钮时文本字段都会追加更多文本,而不是完全删除并替换它。
如何在不替换之前的文本的情况下向UITextView
添加文本?
到目前为止,我有一个UITextView
和一个UIButton
,可以将文本添加到UITextView
中,但是我希望每次单击按钮时文本字段都会追加更多文本,而不是完全删除并替换它。
以下是在iOS开发中克服障碍的几种方法:
查看您正在尝试操作的特定类的文档。在这种情况下,可以通过Xcode或在线找到 UITextView 的文档。
在您的代码中,Command-Click UITextView
或任何其他对象,它将带您进入该类的头文件。头文件将列出每个公共方法和属性。
查看您现有的代码。我假设您知道如何设置 UITextView 的文本,因为您有一个添加文本到 UITextView 的按钮。99%的时间,您会发现任何 setter (mutator) 方法都会有一个相应的 getter (accessor) 方法。在这种情况下,UITextView 有一个名为 setText: 的方法和一个名为 text 的匹配方法。
最后,NSString 有一个称为 stringWithFormat: 的便利方法,您可以使用它来连接(联接)两个字符串,其中包括其他非常有用的功能。 %@ 是字符串的格式说明符。例如,要组合两个字符串 stringOne 和 stringTwo,您可以执行以下操作:
NSString *string = [NSString stringWithFormat:@"%@ %@", stringOne, stringTwo];
我将让您自行想出如何使用上述信息来结合 NSString 的 stringWithFormat: 和 UITextField 的 text 和 setText: 以实现您想要完成的内容。
编辑: 提问者无法想出如何利用上面的信息,因此下面提供了完整的代码示例。
假设您已经合成了一个属性(可能是 IBOutlet)UITextView,您已经初始化了它并称为 myTextView。还假设我们当前在调用方法的范围内(如果您正在使用 IB,则为您的 IBAction),当您点击 UIButton 时,该方法将被调用。
[myTextView setText:[NSString stringWithFormat:@"%@ %@", myTextView.text, @"this is some new text"]];
解释: myTextView.text
获取了UITextView
中现有的文本,您可以简单地在这之后添加任何字符串。因此,如果文本视图最初被填充了文本"Hello world",然后您点击了三次按钮,您将得到以下进展: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)
}
}
}
myTextView.text = [myTextView stringByAppendingString:@"suffix\n"];
我在UITextView insert text in the textview text上找到了这个。很遗憾,我没有找到一种直接添加文本而不需要完全替换UITextView中的文本的方法。令我困扰的是,所需的工作量与现有字符串和后缀的总长度成正比,而不仅仅是后缀。
.text
:[myTextView setText:[myTextView stringByAppendingString:@"suffix\n"]];
应该改为 [myTextView setText:[myTextView.text stringByAppendingString:@"suffix\n"]];
否则你在一个 UITextView
上调用了一个 NSString
的方法 ;) ... 顺便说一下,myTextView.text = [myTextView.text stringByAppendingString:@"suffix\n"];
更简洁一些 ;) - HAS@杰克·劳伦斯:你的回答并没有完全涵盖问题。
当每秒调用时,下面的示例将无法整洁地滚动到底部:
self.consoleView.text = [NSString stringWithFormat:@"%@%@%@", self.consoleView.text, data, @"\n"];
[self.consoleView scrollRangeToVisible:NSMakeRange(self.consoleView.text.length, 0)];