-[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");
}
}
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");
}
}