oc之NSTextField - Label

2017年09月14日 10:39:31 lovechris00 阅读数:2079更多

所属专栏: macOS 开发

 

版权声明:本文为博主原创文章,转载请附上本文链接地址。from : https://blog.csdn.net/lovechris00 https://blog.csdn.net/lovechris00/article/details/77977541

也许你也听说,cocoa 中并没有 UILable ,也没有 NSLabel。 

cocoa 中的 label 实际上是 NSTextField,并将editable = NO; 来实现显示效果。这是不是和 iOS 中的UITextView 很像呢?

下面通过代码简单介绍下cocoa 中的 label 的使用。 

代码默认写在一个 NSWindowController 的子类中。

 

创建

- (void)addLabel{

    NSTextField *label0 = [[NSTextField alloc]init];

    label0.editable = NO;

 

    label0.bordered = NO; //不显示边框

 

    label0.backgroundColor = [NSColor greenColor]; //控件背景色

    label0.textColor = [NSColor magentaColor];  //文字颜色

 

    label0.alignment = NSRightTextAlignment; //水平显示方式

 

    label0.maximumNumberOfLines = 2; //最多显示行数

    label0.frame = NSMakeRect(100, 100, 100, 100);

    label0.stringValue = @"测试文字聚会就大戽水抗旱萨克的";  //现实的文字内容

 

    label0.stringValue = @"测试";

 

    [self.window.contentView addSubview:label0];

 

}

 

 

func addRichableLabel(){

        let text = NSString(string: "please visit http//www.apple.com/")

        let attributedString = NSMutableAttributedString(string:text as String)

        let linkURLText = "http://www.apple.com/"

        let linkURL = NSURL(string: linkURLText)

        //查找字符窜范围

        let selectedRange = text.range(of: linkURLText)

        attributedString.beginEditing()

        //设置连接属性

//        attributedString.addAttributes([NSAttributedString.Key.link : linkURL as Any], range: selectedRange)

        attributedString.addAttribute(NSAttributedString.Key.link, value: linkURL as Any, range: selectedRange)

        //设置文件颜色

        attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: NSColor.blue, range: selectedRange)

        //设置文本下画线

        attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: selectedRange)

        attributedString.endEditing()

        let frame = CGRect(x: 50, y: 50, width: 280, height: 80)

        let rechTextLabel = NSTextField(frame: frame)

        rechTextLabel.isEditable = false

        rechTextLabel.isBezeled = false

        rechTextLabel.drawsBackground = false

        rechTextLabel.attributedStringValue = attributedString

        self.view.addSubview(rechTextLabel)

        

    }

显示多行文字

使用 IB 时,修改break mode 为 wrap 模式即可;

pastedGraphic.png

 

使用代码:

正确做法:

 

 

常用分类

想要快速创建 Label,可以创建 NSTextfield 的分类 。使用 NSTextfield 初始化后,可以调用 msLabelStyle 来使field 作为label 来显示。

- (void)msLabelStyle{

    self.editable = NO;

    self.bordered = NO;

    self.font = [NSFont systemFontOfSize:14];

    self.textColor = kColor_TextBlack;

 

    self.backgroundColor = [NSColor clearColor];

    self.stringValue = @"";

}

 

属性字符 attributedStringValue

- (void)addAttriText{

 

    NSString *linkURLText = @"http://www.apple.com/";

    NSString *text = [NSString stringWithFormat:@"please visit %@",linkURLText];

 

    NSURL *linkURL = [NSURL URLWithString:linkURLText];

 

    NSRange selectedRange = [text rangeOfString:linkURLText];

 

    NSMutableAttributedString *string = [[NSMutableAttributedString alloc]initWithString:text];

 

 

 

    [string beginEditing];

    [string addAttribute:NSLinkAttributeName

                   value:linkURL

                   range:selectedRange];

 

    [string addAttribute:NSForegroundColorAttributeName

                   value:[NSColor blueColor]

                   range:selectedRange];

 

    [string addAttribute:NSUnderlineStyleAttributeName

                   value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:selectedRange];

 

    [string endEditing];

 

    self.richTextLabel.attributedStringValue = string;

}

posted @ 2019-01-28 12:01  sundaysmac  阅读(754)  评论(0编辑  收藏  举报