Swift iOS : YYText显示微博@文字的方法

广告

Swift iOS开发小书 ,帮你快速上手开发 www.ituring.com.cn/book/2413

正文

第三方库YYText可以完成富文本的输入,如果需要创建类似微博@一样的输入UI,可以使用它的YYTextView组件。具体说:

  1. 当内容中有@打头的文字,可以分析出来,并以不同的颜色显示
  2. 当删除时,可以把@文字整体删除

首先需要引用YYText,我们的Podfile:

platform:ios,'9.0'
inhibit_all_warnings!
use_frameworks!
def pods
    pod 'YYText', '~> 1.0.7'
end
target 'V2ex-Swift' do
    pods
end复制代码

执行:

pod install --verbose --no-repo-update复制代码

代码如下:

import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        self.window = UIWindow(frame: UIScreen.main.bounds)
        let page = Page()
        self.window!.rootViewController = page
        self.window?.makeKeyAndVisible()
        return true
    }
}
import YYText
class AtParser: NSObject ,YYTextParser{
    var regex:NSRegularExpression
    override init() {
        self.regex = try! NSRegularExpression(pattern: "@(\\S+)\\s", options: [.caseInsensitive])
        super.init()
    }
    func parseText(_ text: NSMutableAttributedString?, selectedRange: NSRangePointer?) -> Bool {
        guard let text = text else {
            return false;
        }
        self.regex.enumerateMatches(in: text.string, options: [.withoutAnchoringBounds], range: text.yy_rangeOfAll()) { (result, flags, stop) -> Void in
            if let result = result {
                let range = result.range
                if range.location == NSNotFound || range.length < 1 {
                    return ;
                }
                if  text.attribute(YYTextBindingAttributeName, at: range.location, effectiveRange: nil) != nil  {
                    return ;
                }
                let bindlingRange = NSMakeRange(range.location, range.length-1)
                let binding = YYTextBinding()
                binding.deleteConfirm = true ;
                text.yy_setTextBinding(binding, range: bindlingRange)
                text.yy_setColor(.blue, range: bindlingRange)
            }
        }
        return false;
    }
}
class Page: UIViewController ,YYTextViewDelegate {
    var textView:TextView?
    override func viewDidLoad() {
        super.viewDidLoad()
        self.textView = TextView()
        self.textView!.frame = view.frame
        self.textView!.delegate = self
        self.view.addSubview(self.textView!)
    }
}
class TextView :YYTextView{
    override func layoutSubviews() {
        backgroundColor = .yellow
        scrollsToTop = false
        text  = "\n\n\n42 empty lines removed by @someone ,"
        textColor = .red
        textParser = AtParser()
    }
}复制代码

执行后,可以发现:

  1. 默认输入的文字中,@打头的为蓝色文字,其他为红色
  2. 当自己输入文字是,@打头的为蓝色文字,其他为红色
  3. 当删除时,文字会把背景色套住,再次按删除按钮时才会真的删除

代码中需要说的是YYTextParser,它可以创建实例,赋值给YYTextView.textParser,这样就可以使用它分析当前的输入文字,如果正则表达式匹配成功,就可以为这截文字赋予不同的颜色或者其他什么操作,以便显示它和其他文字的不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值