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

时间:2017-06-11 23:21:53

标签: macos cocoa nstextview

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

我知道有可能通过代表......但我在那里遇到同样的问题:如何识别哪个NSTextView是消息传递?

2 个答案:

答案 0 :(得分:0)

您可以在类别中为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

答案 1 :(得分:0)

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

当我实例化说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");
    }
}