【发布时间】:2014-06-28 12:58:26
【问题描述】:
我很想找到答案,所以我打开了 Apple 的 TextLayoutDemo 示例项目。关键是:我有两个用于列视图的 NSTextView。一切正常,我输入的文本通过单个布局管理器成功布局在这两个文本视图中:
NSLayoutManager *twoColumnLayoutManager = [[NSLayoutManager alloc] init];
NSTextContainer *firstColumnTextContainer = [[NSTextContainer alloc] init];
NSTextContainer *secondColumnTextContainer = [[NSTextContainer alloc] init];
NSTextView *firstColumnTextView = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, 240, 360) textContainer:firstColumnTextContainer];
firstColumnTextView.delegate = self;
NSTextView *secondColumnTextView = [[NSTextView alloc] initWithFrame:NSMakeRect(240, 0, 240, 360) textContainer:secondColumnTextContainer];
secondColumnTextView.delegate = self;
[firstColumnTextContainer setContainerSize:NSMakeSize(240, 360)];
[secondColumnTextContainer setContainerSize:NSMakeSize(240, 360)];
[twoColumnLayoutManager addTextContainer:firstColumnTextContainer];
[twoColumnLayoutManager addTextContainer:secondColumnTextContainer];
[twoColumnLayoutManager replaceTextStorage:[firstTextView textStorage]];
[[secondWindow contentView] addSubview:firstColumnTextView];
[[secondWindow contentView] addSubview:secondColumnTextView];
但我的目标是了解用户在哪个文本视图中编辑文本。如果是左边的,我需要调用一个方法,但如果是右边的,我想调用另一个方法。并且似乎无法识别正确的文本视图,因为委托总是从第一个文本视图得到通知。
- (BOOL) textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector {
NSLog(@"edit: %@", textView);
return NO;
}
这种方法总是打印第一个文本视图,即使我在第二个视图中更改了文本。而且我看到它是根据文档进行的,Apple 说总是会有第一个 NSTextView 系列。
但是我该如何解决我的问题呢?
【问题讨论】:
-
当然......你没有告诉最后一个方法你指的是哪个textview。
-
究竟如何?据我了解,已编辑的文本视图调用其委托的此方法来准确告知命令发生的位置。我错了吗?因此,(NSTextView *)textView 必须根据操作发生的位置而有所不同。
-
我建议你阅读每一个涉及 NSTextView 的主题。我不会轻易给出解决方案。
-
我真的做到了。并且有几次让 Apple 文档变红。我仍然找不到任何线索。
标签: objective-c cocoa nstextview