swift 导航栏左按钮自定义
1、设置类型
enum YDBarItemTypeType:Int {
caseOnlyHaveImage=0
caseOnlyHaveTitle=1
case HaveImageAndImage = 2
case NotImageAndImage = 3
}
2、写一个block按钮回调方法
typealias NavBtnClickBlock = () ->Void
var leftBtnBlock:NavBtnClickBlock?
3、然后创建一个按钮懒加载
private lazy var leftBarButton:UIButton = {
letbutton =UIButton.init(type:UIButton.ButtonType.custom)
button.frame=CGRect(x:0,y:0,width:30,height:30)
button.addTarget(self,action:#selector(leftBarButtonClick),for:UIControl.Event.touchUpInside)
returnbutton
}()
4、按钮点击方法实现
@objc func leftBarButtonClick() {
if((self.leftBtnBlock) !=nil){
self.leftBtnBlock!()
}
}
5、调用方法
func setNavigationLeftBarItemType(type:YDBarItemTypeType,title:String,image:String,color:UIColor,block:@escaping NavBtnClickBlock){
leftBtnBlock= block
leftBarButton.setTitleColor(color,for:UIControl.State.normal)
if(type == YDBarItemTypeType.OnlyHaveTitle){
leftBarButton.setTitle(title,for:UIControl.State.normal)
leftBarButton.setImage(UIImage(),for:UIControl.State.normal)
}else if(type == YDBarItemTypeType.OnlyHaveImage){
leftBarButton.setTitle("",for:UIControl.State.normal)
leftBarButton.setImage(UIImage(named: image),for:UIControl.State.normal)
}else if(type == YDBarItemTypeType.HaveImageAndImage){
leftBarButton.setTitle(title,for:UIControl.State.normal)
leftBarButton.setImage(UIImage(named: image),for:UIControl.State.normal)
}else if(type == YDBarItemTypeType.NotImageAndImage){
leftBarButton.setTitle("",for:UIControl.State.normal)
leftBarButton.setImage(UIImage(),for:UIControl.State.normal)
}else{
leftBarButton.setTitle(title,for:UIControl.State.normal)
leftBarButton.setImage(UIImage(named: image),for:UIControl.State.normal)
}
self.navigationItem.leftBarButtonItem = UIBarButtonItem.init(customView: leftBarButton)
}
6、在viewDidLoad中调用方法
setNavigationLeftBarItemType(type: YDBarItemTypeType.OnlyHaveImage,title: "", image: "back_allow",color: UIColor.white, block: {
self.pop()
})