web-dev-qa-db-ja.com

NSTextViewに追加してスクロールします

OK、必要なものshouldは非常に単純です。しかし、私はいたるところを見て、100%動作するものを見つけたかどうかはわかりません(そしてそれは過去にも私を悩ませてきたものです)。

だから、ここにあります:

  • 追加NSTextViewにできるようにしたい
  • 追加後、NSTextViewは下にスクロールする必要があります(最新の追加コンテンツが表示されるように)

かなり簡単ですね。

だから...何かアイデアはありますか? (この単純な「トリック」を正確に実行するコード例は、理想以上のものです...)

23
Dr.Kameleon

いくつかの回答とソースを相互参照した後(いくつかの調整を加えて)、これがdoes work(given _myTextViewNSTextViewアウトレットです):

- (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)];
    });
}
30
Dr.Kameleon

appendAttributedStringscrollToEndOfDocumentは、それぞれOS X 10.10.6 で利用できます。

extension NSTextView {
    func append(string: String) {
        self.textStorage?.appendAttributedString(NSAttributedString(string: string))
        self.scrollToEndOfDocument(nil)
    }
}
13
neoneye

単にこのように使用してください:

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)];
5
Anoop Vaidya

これがSwift AnoopVaidyaの答えのバージョンです

extension NSTextView {
    func append(string: String) {
        let oldString = self.string == nil ? "" : self.string!
        let newString = NSString(format: "%@%@", oldString, string)
        self.string = newString
    }
}
2
Kaydell