iOS开发使用iconfont,封装返回UILabel、UIImage、UIImageView

为啥使用iconfont 理由一堆,反正现在就让我用了。 纯色ICon,都用iconfont。
用的多,所以要封装一下。 iconfont可以用于UILabel显示,也可以是UIImage。 我这里封装了一个返回UILabel和UIImageView的,连同带点击事件。
刚开始网上找找有没有封装好的方法,一直都不太好用,干脆自己搞一个吧。
直接上代码
  1. 先获取所有iconfont名称,后面方便直接用
ini 复制代码
public enum IconFontName: String {
    case downLoad = "\u{e60f}"
    case selectRight = "\u{e611}"
    case rightArrow = "\u{e612}"
    case closeIcon = "\u{e614}"
    case listIcon = "\u{e616}" 
    case avater = "\u{e617}"
    case backIcon = "\u{e618}"
    case feedback = "\u{e619}"
    case wrongIcon = "\u{e61b}" 
    case editIcon = "\u{e61c}"
    case warning = "\u{e610}"  
    case score = "\u{e60e}"
    case time = "\u{e60c}"
    case imageIcon = "\u{e60d}"
}

2.返回UILabel,带点击事件

ini 复制代码
class ExIconFont {

    class func iconFontToLabel(frame: CGRect = .zero, fontSize: CGFloat, fontName: String, iconName: String = "", action:(()->Void)?) -> UILabel 
        let lab = UILabel(frame: frame)
        lab.font = R.font.iconfont(size: fontSize)
        lab.text = fontName
        lab.isUserInteractionEnabled = true
        let tap = ClosureTapGestureRecognizer()
        lab.addGestureRecognizer(tap)
        tap.addAction { tap in
            guard let action = action else {
                return
            }
            action()
        }
        return lab
    }

3.返回UILabel有时候不行,那就在加封装返回一个UIImage 或者 UIImageView。 我这里直接返回了UIImageView, 方便使用。

swift 复制代码
class func iconfontToImage(iconText: String, fontSize: CGFloat, fontColor: UIColor, action:(()->Void)?) -> UIImageView {
        // 这里我使用的R.Swift资源管理, 你可以直接用:UIFont(name: "你的iconfont名称", size: fontSize)
        let font = R.font.iconfont(size: fontSize)
        let attributes = [NSAttributedString.Key.font: font, NSAttributedString.Key.foregroundColor: fontColor]
        let attributedString = NSAttributedString(string: iconText, attributes: attributes as [NSAttributedString.Key : Any])

        UIGraphicsBeginImageContextWithOptions(CGSize(width: fontSize, height: fontSize), false, 0)
        attributedString.draw(at: CGPoint(x: 0, y: 0))
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        // 如果不想用UIIimageView , 这里直接返回image即可。 return image
        
        let imageV = UIImageView(image: image)
        imageV.isUserInteractionEnabled = true
        let tap = ClosureTapGestureRecognizer()
        imageV.addGestureRecognizer(tap)
        tap.addAction { tap in
            guard let action = action else {
                return
            }
            action()
        }
        return imageV
    }

3.自定义一个点击事件封装

swift 复制代码
/// 自定义tapgesture 闭包方式回调
class ClosureTapGestureRecognizer: UITapGestureRecognizer {
    private var action: ((UITapGestureRecognizer) -> Void)?

    func addAction(_ action: @escaping ((UITapGestureRecognizer) -> Void)) {
        self.action = action
    }

    @objc func handleAction(sender: UITapGestureRecognizer) {
        guard let action = action else { return }

        action(sender)
    }

   
    override init(target: Any?, action: Selector?) {
        super.init(target: target, action: action)

        self.addTarget(self, action: #selector(handleAction(sender:)))
    }
}

4.使用方法

php 复制代码
        // 返回label
        let iconLabel = ExIconFont.iconFontLabel(fontSize: 24, fontName: IconFontName.avater.rawValue) {
           self.navigationController?.pushViewController(PersonViewController(), animated: true)
        }
        // 返回UIImageView
        let iconFontImageV = ExIconFont.iconfontToImage(iconText: IconFontName.avater.rawValue, fontSize: 24, fontColor: .black) {
        // 点击事件
           self.navigationController?.pushViewController(PersonViewController(), animated: true)
        }

        // 直接赋值
        navigationItem.leftBarButtonItem = UIBarButtonItem(customView: iconFontImageV)

完活~

相关推荐
2501_9160088927 分钟前
iOS 抓包工具有哪些?全面盘点主流工具与功能对比分析
android·ios·小程序·https·uni-app·iphone·webview
2501_9159214331 分钟前
iOS混淆工具实战 视频流媒体类 App 的版权与播放安全保护
android·ios·小程序·https·uni-app·iphone·webview
2501_916008894 小时前
uni-app iOS 日志与崩溃分析全流程 多工具协作的实战指南
android·ios·小程序·https·uni-app·iphone·webview
2501_915921436 小时前
iOS混淆工具实战 在线教育直播类 App 的课程与互动安全防护
android·安全·ios·小程序·uni-app·iphone·webview
Digitally7 小时前
没 iCloud, 如何数据从iPhone转移到iPhone
ios·iphone·icloud
笑尘pyrotechnic8 小时前
push pop 和 present dismiss
macos·ui·ios·objective-c·cocoa
Digitally8 小时前
如何将联系人从 iPhone 转移到 Redmi 手机
ios·智能手机·iphone
2501_915106329 小时前
Charles抓包工具在接口性能优化与压力测试中的实用方法
ios·性能优化·小程序·https·uni-app·压力测试·webview
Winson℡18 小时前
在 React Native 层禁止 iOS 左滑返回(手势返回/手势退出)
react native·react.js·ios
Digitally1 天前
如何轻松地将联系人从 Mac 同步到 iPhone
macos·ios·iphone