好的,我需要的应该很简单。然而,我到处寻找,我不确定我是否找到了 100% 有效的东西(这也是过去困扰我的东西)。
所以,我们在这里:
- 我希望能够附加到
NSTextView
- 附加后,
NSTextView
应该向下滚动(以便最新附加的内容可见)
比较直白吧?
所以......有什么想法吗?(一个完全执行这个简单“技巧”的代码示例将非常理想......)
好的,我需要的应该很简单。然而,我到处寻找,我不确定我是否找到了 100% 有效的东西(这也是过去困扰我的东西)。
所以,我们在这里:
NSTextView
NSTextView
应该向下滚动(以便最新附加的内容可见)比较直白吧?
所以......有什么想法吗?(一个完全执行这个简单“技巧”的代码示例将非常理想......)
在交叉引用了几个答案和来源(进行了一些调整)之后,这里的答案确实有效(假设 _myTextView
是一个NSTextView
出口):
- (void)appendToMyTextView:(NSString*)text
{
dispatch_async(dispatch_get_main_queue(), ^{
NSAttributedString* attr = [[NSAttributedString alloc] initWithString:text];
[[_myTextView textStorage] appendAttributedString:attr];
[_myTextView scrollRangeToVisible:NSMakeRange([[_myTextView string] length], 0)];
});
}
只需使用这种方式:
for (NSInteger i=1; i<=100; i++) {
[self.textView setString:[NSString stringWithFormat:@"%@\n%@",[self.textView string],@(i)]];
}
[self.textView scrollRangeToVisible:NSMakeRange([[self.textView string] length], 0)];
这是 Anoop Vaidya 答案的 Swift 版本
extension NSTextView {
func append(string: String) {
let oldString = self.string == nil ? "" : self.string!
let newString = NSString(format: "%@%@", oldString, string)
self.string = newString
}
}
这是一个更快捷的解决方案:
extension NSTextView {
func appendString(string:String) {
self.string! += string
self.scrollRangeToVisible(NSRange(location:countElements(self.string!), length: 0))
}
}