【问题标题】:Which one of the two NSTextViews has been edited? doCommandBySelector is always returns the first one两个 NSTextView 中的哪一个被编辑了? doCommandBySelector 总是返回第一个
【发布时间】: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


【解决方案1】:

告诉我,如果这个解决方案是我正在寻找的解决方案。因为,事实上,它工作得很好。我不明白的一件事是,为什么 Cocoa 文本系统在没有必要的地方如此棘手?

- (void)textStorageDidProcessEditing:(NSNotification *)aNotification {
    // that's the active text view
    NSWindow *keyWindow = [[NSApplication sharedApplication] keyWindow];
    NSTextView *activeTextView = (NSTextView *)[keyWindow firstResponder];
    NSLog(@"%p", activeTextView);
}

更新:仅当用户单击鼠标按钮时才有效。方向键不更新窗口的第一响应者:(

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2011-02-20
    • 2021-06-24
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    相关资源
    最近更新 更多