2013-03-02 10 views
18

いいえ、私が必要としているのはです。はとてもシンプルです。しかし、私はどこにでも見てきました。私は100%働く何かを見つけたとは思えません。NSTextViewに追加してスクロール

ので、ここでは、次のとおりです。私が追加した後NSTextView

  • APPENDにできるようにしたい

    • (その最新の追加内容が表示されるように)、NSTextView
    • を下にスクロールする必要があり

    むしろ簡単ですか?

    だから...任意のアイデアですか?いくつかの答えと(いくつかの微調整との)ソースを相互参照した後

  • 答えて

    22

    (正確にこの単純な「トリック」を実行するコードの例が...理想的以上のものでしょう)、ここで作業を行うことの答えだ(_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)]; 
        }); 
    } 
    
    +1

    は '_myTextView'を使用しないでください。代わりに 'self.myTextView'を使用してください。プロパティにアクセスする '_myTextView'メソッドは、何百万回ものコード行を連続して実行しているときにのみ使用するべきです。 'self.myTextView'はスレッドセーフです(宣言された方法に依存します)ので、GCDを使用する場合は特にそうです。 –

    5

    は単純にこの方法を使用します。

    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)]; 
    
    +0

    これは私のアプローチとほぼ同じです(例外として、私の経験から、メインスレッドの 'NSTextView'でトリックを実行することは、不具合やあらゆる種類の予期しない動作を避けるためには実際より安全です)。とにかくお返事いただきありがとうございます! ;-) –

    +0

    ブロックを使用し、textViewのテキストを追加しました。書き直しました。あなたのものは私のものより優れています。 –

    2

    はここアヌープVaidyaの答え

    のスウィフトバージョンです
    extension NSTextView { 
        func append(string: String) { 
         let oldString = self.string == nil ? "" : self.string! 
         let newString = NSString(format: "%@%@", oldString, string) 
         self.string = newString 
        } 
    } 
    
    +0

    追加時に改行が常に追加されるようにセマンティクスを変更しました。 – Kaydell

    -1

    ここSwifti ERソリューションです:

    extension NSTextView { 
        func appendString(string:String) { 
         self.string! += string 
         self.scrollRangeToVisible(NSRange(location:countElements(self.string!), length: 0)) 
        } 
    } 
    
    6

    appendAttributedStringscrollToEndOfDocumentが可能ですOS X 10.010.6に始まるが、それぞれ

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

    テキストビューで管理されている文字列の長さが狂った(> 100,000行以上)場合、ここでメモリ管理について心配する必要がありますか?たとえば、無期限に増加するログファイルから行を追加するとき... – wcochran

    +0

    @wcochranこれにはメモリ内のファイルの範囲が小さいカスタムテキストビューが必要です。 – neoneye

    関連する問題