我似乎无法以编程方式构建有效的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中,以防这个问题出现问题,但这没什么用。)
我不能为我的生活找出问题所在。我错过了什么?
答案 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相同的结果直到此更改 - 视图定位准确,但未显示文本或显示插入点或调用委托方法 - 然后文本视图正常工作。