• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

swift之NSTextView的使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  

fileprivate let tv:NSTextView = {

        let textView = NSTextView(frame: NSMakeRect(30, 30, 200, 30))

        return textView

    }();

override func viewDidLoad() {

        super.viewDidLoad()

 

        // Do any additional setup after loading the view.

        

        self.view.addSubview(self.tv);

        //1设置textStorage的代理,实现NSTextStorageDelegate代理协议的textStorageDidProcessEiting方法

        //实现响应用户输入

        tv.textStorage?.delegate = self;

        

        

        /***

         textStorage存储富文本

         **/

        let attributedString = NSMutableAttributedString(string: "attringbutedString" as String)

        attributedString.addAttributes([NSAttributedString.Key.foregroundColor : NSColor.green as Any], range: NSMakeRange(0, 5))

        attributedString.addAttributes([NSAttributedString.Key.font : NSFont(name: "宋体", size: 14) as Any], range: NSMakeRange(5, 10))

        tv.textStorage?.setAttributedString(attributedString)

                

    }

 

  

//实现NSTextStorageDelegate代理协议的textStorageDidProcessEiting方法

    func textStorage(_ textStorage: NSTextStorage, didProcessEditing editedMask: NSTextStorageEditActions, range editedRange: NSRange, changeInLength delta: Int) {

        //文本框高度根据文字高度自适应增长

        self.perform(#selector(self.setHeightToMatchContents), with: nil, afterDelay: 0.0)

    }

    //计算当前输入文本的高度

    func naturalSize()->NSSize {

        let bounds:NSRect = self.tv.bounds;

        let layoutManager:NSLayoutManager = self.tv.textStorage!.layoutManagers[0]

        let textContainer:NSTextContainer = layoutManager.textContainers[0]

        textContainer.containerSize = NSMakeSize(bounds.size.width, 1.0e7)

        layoutManager.glyphRange(for: textContainer)

        let naturalSize: NSSize? = layoutManager.usedRect(for: textContainer).size

        return naturalSize!

    }

    //根据文本高度修改文本框对应的滚动条高度

   @objc func setHeightToMatchContents() {

        let naturalSize: NSSize = self.naturalSize()

        if let scrollView = self.tv.enclosingScrollView {

            let frame = scrollView.frame

            scrollView.frame = NSMakeRect(frame.origin.x, frame.origin.y, frame.size.width, naturalSize.height + 4)

        }

    }

}


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap