自定義UIBarButtonItem

最近在學(xué)習(xí)swift的過(guò)程中,看到了一些自定義UIBarButtonItem的例子,再此想和大家分享一下,廢話不多說(shuō),先看下效果圖:

Paste_Image.png
1 重寫B(tài)utton的titleLabel和imageView兩個(gè)屬性
class ItemLeftButton: UIButton {
    override func layoutSubviews() {
        super.layoutSubviews()
        let Offset: CGFloat = 15
        titleLabel?.sizeToFit()
        titleLabel?.frame = CGRectMake(-Offset, height - 15, width - Offset, (titleLabel?.height)!)
        titleLabel?.textAlignment = .Center
        imageView?.frame = CGRectMake(-Offset, 0, width - Offset, height - 15)
        imageView?.contentMode = .Center
    }
}

class ItemRightButton: UIButton {
    override func layoutSubviews() {
        super.layoutSubviews()
        let Offset: CGFloat = 15
        titleLabel?.sizeToFit()
        titleLabel?.frame = CGRectMake(Offset, height - 15, width + Offset, (titleLabel?.height)!)
        titleLabel?.textAlignment = .Center
        imageView?.frame = CGRectMake(Offset, 0, width + Offset, height - 15)
        imageView?.contentMode = UIViewContentMode.Center
    }
}
2 自定義UIBarButtonItem的方法
enum ItemButtonType: Int {
    case Left = 0
    case Right = 1
}

extension UIBarButtonItem {
    class func barButton(title: String, titleColor: UIColor, image: UIImage, hightLightImage: UIImage?, target: AnyObject?, action: Selector, type: ItemButtonType) -> UIBarButtonItem {
        var btn:UIButton = UIButton()
        if type == ItemButtonType.Left {
            btn = ItemLeftButton(type: .Custom)
        } else {
            btn = ItemRightButton(type: .Custom)
        }
        btn.setTitle(title, forState: .Normal)
        btn.setImage(image, forState: .Normal)
        btn.setTitleColor(titleColor, forState: .Normal)
        btn.setImage(hightLightImage, forState: .Highlighted)
        btn.addTarget(target, action: action, forControlEvents: .TouchUpInside)
        btn.frame = CGRectMake(0, 0, 60, 44)
        btn.titleLabel?.font = UIFont.systemFontOfSize(10)
        return UIBarButtonItem(customView: btn)
    }
    
    class func barButton(image: UIImage, target: AnyObject?, action: Selector) -> UIBarButtonItem {
        let btn = ItemLeftButton(type: .Custom)
        btn.setImage(image, forState: UIControlState.Normal)
        btn.imageView?.contentMode = UIViewContentMode.Center
        btn.addTarget(target, action: action, forControlEvents: UIControlEvents.TouchUpInside)
        btn.frame = CGRectMake(0, 0, 44, 44)
        return UIBarButtonItem(customView: btn)
    }
    
    class func barButton(title: String, titleColor: UIColor, target: AnyObject?, action: Selector) -> UIBarButtonItem {
        let btn = UIButton(frame: CGRectMake(0, 0, 60, 44))
        btn.setTitle(title, forState: .Normal)
        btn.setTitleColor(titleColor, forState: .Normal)
        btn.addTarget(target, action: action, forControlEvents: UIControlEvents.TouchUpInside)
        btn.titleLabel?.font = UIFont.systemFontOfSize(15)
        if title.characters.count == 2 {
            btn.contentEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: -25)
        }
        return UIBarButtonItem(customView: btn)
    }
}
3 對(duì)UIView進(jìn)行擴(kuò)展
extension UIView {
    /// X值
    var x: CGFloat {
        return self.frame.origin.x
    }
    /// Y值
    var y: CGFloat {
        return self.frame.origin.y
    }
    /// 寬度
    var width: CGFloat {
        return self.frame.size.width
    }
    ///高度
    var height: CGFloat {
        return self.frame.size.height
    }
    var size: CGSize {
        return self.frame.size
    }
    var point: CGPoint {
        return self.frame.origin
    }
}
4 調(diào)用方法
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        navigationItem.leftBarButtonItem = UIBarButtonItem.barButton("掃一掃", titleColor: UIColor.blackColor(), image: UIImage(named: "icon_black_scancode")!, hightLightImage: nil, target: self, action: #selector(ViewController.leftItemClick), type: ItemButtonType.Left)
    }
    
    func leftItemClick() {
        print("掃一掃")
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 需求描述:在項(xiàng)目開(kāi)發(fā)過(guò)程中,遇到一種情況,需要自定義UIBarButtonItem,來(lái)實(shí)現(xiàn)分享樣式,并在iPad中...
    平原河流閱讀 5,590評(píng)論 0 2
  • 幾乎每個(gè)APP中都會(huì)用到UIBarButtonItem, 今天寫了一個(gè)類讓小伙伴們更能直接體會(huì)到封裝的好處 今天我...
    劉戦軍閱讀 2,927評(píng)論 4 5
  • 某些情況下我們需要自定義我們的UIBarButtonItem,這個(gè)時(shí)候我們會(huì)發(fā)現(xiàn)我們的左滑返回失效了,此時(shí)我們只需...
    Axiba閱讀 156評(píng)論 0 0
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,180評(píng)論 4 61
  • #校報(bào)早話# 縱然前方一片黑暗,也要心里存留一抹光明。 早安。
    原來(lái)是局外人閱讀 283評(píng)論 0 0