以编程方式创建NSTextView?

时间:2014-07-12 23:02:37

标签: objective-c macos cocoa nstextview

我似乎无法以编程方式构建有效的NSTextView。从一个新的项目模板开始,我有这个代码(主要来自Apple的“文本系统用户界面层编程指南”):

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSString *string = @"Here's to the ones who see things different.";
    NSTextStorage *textStorage = [[NSTextStorage alloc] initWithString:string];
    NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
    [textStorage addLayoutManager:layoutManager];

    NSTextContainer *textContainer = [[NSTextContainer alloc] initWithContainerSize:NSMakeSize(300, 300)];
    [layoutManager addTextContainer:textContainer];

    NSTextView *textView = [[NSTextView alloc] initWithFrame:NSMakeRect(50, 50, 300, 300)
                                               textContainer:textContainer];

    [textContainer setWidthTracksTextView:YES];
    [textView setVerticallyResizable:YES];
    [textView setHorizontallyResizable:NO];
    [textView setAutoresizingMask:NSViewWidthSizable];

    [[self.window contentView] addSubview:textView];
}

运行应用程序时,会打开一个窗口,其中有一个白色正方形,它应该是NSTextView,但是没有文本,也没有办法与文本视图交互。此外,我尝试在使用[textView setString:@"Some string."]创建视图后在代码中向文本视图添加文本,但这也不起作用。 (顺便说一句,我也尝试先把它放在NSScrollView中,以防这个问题出现问题,但这没什么用。)

我不能为我的生活找出问题所在。我错过了什么?

2 个答案:

答案 0 :(得分:0)

这应该有用,虽然我自己尝试了,但也无法编辑。它现在可能是一个错误,但我不是100%肯定。如果你需要使用容器和布局管理器,只需使用来自initWithFrame:方法的那个(没有文本容器)。

NSTextView *textView = [[NSTextView alloc] initWithFrame:NSMakeRect(50, 50, 300, 300)];
NSLayoutManager *layoutManager = textView.layoutManager;
NSTextContainer *textContainer = textView.textContainer;
NSTextStorage *textStorage = textView.textStorage;

//Do your edits here

答案 1 :(得分:0)

展开TheAmateurProgrammer's answer

  

如果你需要使用容器和布局管理器,只需使用来自initWithFrame:方法的那个(没有文本容器)

使用iOS时,需要为UITextView创建文本存储,布局管理器和文本容器,以便按预期工作。要使NSTextView正常运行,需要创建它们。与OP相同的结果直到此更改 - 视图定位准确,但未显示文本或显示插入点或调用委托方法 - 然后文本视图正常工作。