专业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")
        

results matching ""

    No results matching ""