Xcode无法识别NSLabel

时间:2013-11-23 23:39:38

标签: xcode macos object import label

我正在尝试为我的osx应用程序创建一个NSLabel,但是Xcode没有认识到“NSLabel”类型是有效的,并建议我尝试“NSPanel”。

在头文件中,我有以下导入:

#import <Cocoa/Cocoa.h>
#import <AppKit/AppKit.h>

我该如何解决这个问题?我需要导入另一个文件吗?

3 个答案:

答案 0 :(得分:27)

OS X上没有标签类(NSLabel)。您必须使用NSTextField代替,删除挡板并使其不可编辑:

[textField setBezeled:NO];
[textField setDrawsBackground:NO];
[textField setEditable:NO];
[textField setSelectable:NO];

答案 1 :(得分:4)

我有同样的问题,按照DrummerB的建议我创建了这个NSLabel类。

标题

//
//  NSLabel.h
//
//  Created by Axel Guilmin on 11/5/14.
//

#import <AppKit/AppKit.h>

@interface NSLabel : NSTextField

@property (nonatomic, assign) CGFloat fontSize;
@property (nonatomic, strong) NSString *text;

@end

实施

//
//  NSLabel.m
//
//  Created by Axel Guilmin on 11/5/14.
//

#import "NSLabel.h"

@implementation NSLabel

#pragma mark INIT
- (instancetype)init {
    self = [super init];
    if (self) {
        [self textFieldToLabel];
    }
    return self;
}

- (instancetype)initWithFrame:(NSRect)frameRect {
    self = [super initWithFrame:frameRect];
    if (self) {
        [self textFieldToLabel];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];
    if (self) {
        [self textFieldToLabel];
    }
    return self;
}

#pragma mark SETTER
- (void)setFontSize:(CGFloat)fontSize {
    super.font = [NSFont fontWithName:self.font.fontName size:fontSize];
}

- (void)setText:(NSString *)text {
    [super setStringValue:text];
}

#pragma mark GETTER
- (CGFloat)fontSize {
    return super.font.pointSize;
}

- (NSString*)text {
    return [super stringValue];
}

#pragma mark - PRIVATE
- (void)textFieldToLabel {
    super.bezeled = NO;
    super.drawsBackground = NO;
    super.editable = NO;
    super.selectable = YES;
}

@end

您需要#import "NSLabel.h"才能使用它,但我觉得它更干净。

答案 2 :(得分:0)

Swift 4.2

open class NSLabel:NSTextField{
    override init(frame frameRect: NSRect) {
      super.init(frame: frameRect)
      self.isBezeled = false
      self.drawsBackground = false
      self.isEditable = false
      self.isSelectable = false
    }
}