建立 NSTextView

圖形

在 XCode 中,可以通過從物件庫中拖放一個簡單的 NSTextView 來建立它。

StackOverflow 文件

此 NSTextView 位於 NSScrollView 內,該 NSScrollView 自動設定為使用文字檢視垂直擴充套件。確保選項(⌥) - 拖拽時連線到文字檢視而不是滾動檢視。

StackOverflow 文件

程式設計

以程式設計方式建立 NSTextView 允許更好的控制和自定義。它稍微困難一些,需要對文字系統的瞭解才能充分發揮它的潛力。有關文字系統的更多資訊,請點選此處 。以程式設計方式進行文字檢視所需的基礎知識如下:

  • 完全正常執行的 NSTextView 需要三個其他物件才能工作:

    1. NSLayoutManager - 執行字形/字元佈局。
    2. NSTextContainer - 控制字形/字元可以駐留的圖形空間。
    3. NSTextStorage - 儲存 NSTextView 顯示的實際字串資料。
  • NSTextStorage 可以有許多 NSLayoutManager,但 NSLayoutManager 只能有一個 NSTextStorage。如果你希望以不同方式同時顯示相同的資料,這將非常有用。

  • NSLayoutManager 可以有很多 NSTextContainer。對分頁文字很有用。

  • NSTextView 一次只能有一個 NSTextContainer。

  • 在撰寫本文時,NSTextView 中內建的某些內容是不受限制的。例如,內建的查詢和替換功能無法自定義,但可以使用自定義功能覆蓋。

有關如何使用文字系統的更多資訊,請參見此處

現在為程式碼。這段程式碼將建立一個簡單的 NSTextView,甚至不滾動。滾動和分頁等內容將在另一個例子中。

Objective-C

// This code resides in an NSDocument object's windowControllerDidLoadNib:(NSWindowController *)windowController method.
// This is done simply because it is easy and automatically gets called upon.

// This method is also where the following NSRect variable gets size information. We need this information for this example.
NSRect windowFrame = windowController.window.contentView.frame;
NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString:@"Example text!"];
NSLayoutManager *manager = [[NSLayoutManager alloc] init];
NSTextContainer *container = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(windowFrame.size.width, windowFrame.size.height)];
NSTextView *textView = [[NSTextView alloc] initWithFrame:windowFrame textContainer:container];

[textStorage addLayoutManager:manager];
[manager addTextContainer:container];
[windowController.window setContentView:textView];

恭喜! 你已通過程式設計方式建立了 NSTextView!

StackOverflow 文件