-[NSTextView setTag:] 不存在...如何识别不同的文本视图?

-[NSTextView setTag:] does not exist... how can I identify different text views?

NSTextView 似乎没有 setTag:。 因此,如果我有多个 NSTextView,我如何在不为每个创建 iVar 的情况下访问它们?

我知道可能是通过委托...但我遇到了同样的问题:如何识别哪个 NSTextView 正在发送消息?

您可以在类别中为 NSTextView 添加自己的标签 属性,并使其可在 Xcode Interface Builder

中编辑
IB_DESIGNABLE

@interface NSTextView (Tag)

@property (strong, readwrite, nonatomic, nullable) IBInspectable NSString *myTag;

@end

const NSMutableDictionary* tagsMap;

@implementation NSTextView (Tag)

- (void) dealloc {
    tagsMap[[NSValue valueWithNonretainedObject:self]] = nil;
}

- (void) setMyTag:(NSString *)myTag {
    if (tagsMap == nil) {
        tagsMap = [NSMutableDictionary new];
    }
    tagsMap[[NSValue valueWithNonretainedObject:self]] = myTag;
}

- (NSString*) myTag {
    return tagsMap[[NSValue valueWithNonretainedObject:self]];
}

@end

只是添加一种方法...简单...但很脏。

当我实例化说 2 个 NSTextViews 时...我为每个设置了不同的 fontSize:(49 和 50)所以我可以这样识别它们。

-(void)textDidChange:(NSNotification *)notification {
    NSTextView* textView = (NSTextView *)[notification object];
    if ([textView.font isEqualTo:[NSFont systemFontOfSize:49]]) {
        NSLog(@"1");
    } else if ([textView.font isEqualTo:[NSFont systemFontOfSize:50]]) 
    {
        NSLog(@"2");
    }
}