专业java、php、iOS、C++、网页设计、平面设计、网络营销、游戏开发、前端与移动开发培训机构
首页导航栏按钮
用户登录成功后,显示
搜索好友和更多操作图片按钮在
viewDidLoad添加setNavigationBar方法设置导航栏
左右按钮- 在
setNavigationBar添加:private func setupNavigation() -> Void { // 设置导航栏左按钮 let leftButton = UIButton() leftButton.setBackgroundImage(UIImage(named: "navigationbar_friendsearch"), for: UIControlState.normal) leftButton.setBackgroundImage(UIImage(named: "navigationbar_friendsearch_highlighted"), for: UIControlState.highlighted) leftButton.sizeToFit() navigationItem.leftBarButtonItem = UIBarButtonItem(customView: leftButton) // 设置导航栏右按钮 let rightButton = UIButton() rightButton.setBackgroundImage(UIImage(named: "navigationbar_pop"), for: UIControlState.normal) rightButton.setBackgroundImage(UIImage(named: "navigationbar_pop_highlighted"), for: UIControlState.highlighted) rightButton.sizeToFit() navigationItem.rightBarButtonItem = UIBarButtonItem(customView: rightButton) } - 发现代码非常的相似,可以抽取
/** 快速创建带高亮图片的BarButton parameter imageName: 正常时的图片名称 parameter highlightedImageName: 高亮时的图片名称 returns: UIBarButtonItem */ private func createBarButtonItem(imageName: String, highlightedImageName: String) -> UIBarButtonItem { let button = UIButton() button.setBackgroundImage(UIImage(named: imageName), for: UIControlState.normal) button.setBackgroundImage(UIImage(named: highlightedImageName), for: UIControlState.highlighted) button.sizeToFit() return UIBarButtonItem(customView: button) } 调用方式修改为:
// 设置导航栏左右按钮 navigationItem.leftBarButtonItem = createBarButtonItem(imageName: "navigationbar_friendsearch", highlightedImageName: "navigationbar_friendsearch_highlighted") // 设置导航栏右按钮 navigationItem.rightBarButtonItem = createBarButtonItem(imageName: "navigationbar_pop", highlightedImageName: "navigationbar_pop_highlighted")发现这样代码还是有
缺陷,如果在其他控制器需要创建带高亮图片的UIBarButtonItem,需要将这段代码复制过去,说明这段代码放在这里并不是最合适的地方,在OC里面我们通常会放在Category里面,在swift中的extension- 新建
UIBarButtonItem+Extension.swift文件 - 添加
createBarButtonItem方法extension UIBarButtonItem { /** 快速创建带高亮图片的BarButton parameter imageName: 正常时的图片名称 parameter highlightedImageName: 高亮时的图片名称 returns: UIBarButtonItem */ class func createBarButtonItem(imageName: String, highlightedImageName: String) -> UIBarButtonItem { let button = UIButton() button.setBackgroundImage(UIImage(named: imageName), for: UIControlState.normal) button.setBackgroundImage(UIImage(named: highlightedImageName), for: UIControlState.highlighted) button.sizeToFit() return UIBarButtonItem(customView: button) } } 调用方式修改为:
// 设置导航栏左右按钮 navigationItem.leftBarButtonItem = UIBarButtonItem.createBarButtonItem(imageName: "navigationbar_friendsearch", highlightedImageName: "navigationbar_friendsearch_highlighted") // 设置导航栏右按钮 navigationItem.rightBarButtonItem = UIBarButtonItem.createBarButtonItem(imageName: "navigationbar_pop", highlightedImageName: "navigationbar_pop_highlighted")还不是特别方便,改成使用便利构造函数:
extension UIBarButtonItem { /* 快速创建带高亮图片的BarButton parameter imageName: 正常时的图片名称 parameter highlightedImageName: 高亮时的图片名称 returns: UIBarButtonItem */ convenience init(imageName: String, highlightedImageName: String) { let button = UIButton() button.setBackgroundImage(UIImage(named: imageName), for: UIControlState.normal) button.setBackgroundImage(UIImage(named: highlightedImageName), for: UIControlState.highlighted) button.sizeToFit() self.init(customView: button) } }调用
// 设置导航栏左右按钮 navigationItem.leftBarButtonItem = UIBarButtonItem(imageName: "navigationbar_friendsearch", highlightedImageName: "navigationbar_friendsearch_highlighted") // 设置导航栏右按钮 navigationItem.rightBarButtonItem = UIBarButtonItem(imageName: "navigationbar_pop", highlightedImageName: "navigationbar_pop_highlighted")
- 新建
- 在