美文网首页
Swift 重构: 导航栏下拉单选菜单解耦

Swift 重构: 导航栏下拉单选菜单解耦

作者: SoaringHeart | 来源:发表于2021-07-09 17:36 被阅读0次

重构实现:

  • 通过扩展实现,低解耦;
  • Cell 可自定义,适用范围扩展;
  • 下拉列表高度可调整;
  • 调用简单;

Screenshot:

UIButton+TopMenu.png

example:

class NNButtonStudyController: UIViewController{

    var normlImage = UIImage(named: "icon_selected_no_default")!
    var seletedImage = UIImage(named: "icon_selected_yes_green")!
    
    lazy var btn: UIButton = {
        let sender = UIButton(type: .custom)
        sender.setTitle("默认样式", for: .normal);
//        sender.adjustsImageWhenHighlighted = false
        
        if #available(iOS 13.0, *) {
            sender.setImage(UIImage.chevron_down, for: .normal)
            sender.setImage(UIImage.chevron_up, for: .selected)
        }

        sender.sizeToFit()
        sender.layoutButton(direction: 3, imageTitleSpace: 8)
        sender.addTarget(self, action: #selector(handActionBtn(_:)), for: .touchUpInside)

        sender.topMenuTarget.items = [String].init(count: 6, generator: { "icon_selected_no_default_\($0)" })
        sender.topMenuTarget.selectedBlock = {
            let title = sender.topMenuTarget.items[$0]
            sender.setTitle(title, for: .normal)
            sender.sizeToFit()
            sender.layoutButton(direction: 3, imageTitleSpace: 8)
        }
        sender.topMenuTarget.cellForRowBlock = { tableView, indexPath in
            let cell = UITableViewCellOne.dequeueReusableCell(tableView, identifier: UITableViewCellOne.reuseIdentifier, style: .subtitle)
            
            cell.imageView?.image = UIImage.img_update
            cell.textLabel?.text = sender.topMenuTarget.items[indexPath.row]
            cell.detailTextLabel?.text = sender.topMenuTarget.items[indexPath.row]
            return cell
        }
        return sender
    }()
}

    // MARK: -life cycle
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        navigationItem.titleView = btn
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        
        btn.topMenuTarget.dismiss(false)
    }

    //MARK: -functions
    @objc func handActionBtn(_ sender: NNButton) {
        sender.isSelected.toggle()
        if sender.isSelected {
            sender.topMenuTarget.show()
        } else {
            sender.topMenuTarget.dismiss()
        }
    }
}

Github

相关文章

  • Swift 重构: 导航栏下拉单选菜单解耦

    重构实现: 通过扩展实现,低解耦; Cell 可自定义,适用范围扩展; 下拉列表高度可调整; 调用简单; Scre...

  • 一些标准的做法

    ** 制作导航栏** 制作下拉菜单

  • [JS]单选按钮,下拉框获取选中值

    单选按钮 获取单选钮的值 下拉菜单 获取下拉菜单选中的值

  • SystemUI之快捷面板的修改

    SystemUI简介 作为系统应用,SystemUI 包含的内容较多,比如状态栏、通知栏、下拉菜单、导航栏、锁屏、...

  • Vuex基础使用 & Vuex 监听数据/值2021-04-29

    需求:1:头部导航栏中'XXXX'标题栏,显示下拉菜单2:选中下拉菜单数据,将数据回显到页面指定位置3:点击回显处...

  • BootStrap

    CDN引用 一、标签页&下拉菜单 二、顶部导航栏 三、表格、表单、按钮 其它 折叠 .collapse 默认折叠....

  • Flutter3.7版本新增组件-Menu菜单系列介绍

    之前Flutter的菜单选择、下拉菜单的支持非常简单且不友好,对于非常常见的下拉菜单选择功能是需要自己自定义实现,...

  • dash(2)--可使用的组件

    1.下拉菜单-dropdown 2.多选下拉菜单 -- dropdown(multi=True) 3.单选-- r...

  • 解耦

    解耦 对于大型重构, 最有效的手段就是 解耦, 解耦的目的使实现代码高聚合、松耦合。 解耦为何如此...

  • 安卓工具栏的使用

    工具栏可以提供应用导航、放置菜单选项,也可以统一风格设计等,这里有个简单的例子,如图所示: 这里我们创建工具栏菜单...

网友评论

      本文标题:Swift 重构: 导航栏下拉单选菜单解耦

      本文链接:https://www.haomeiwen.com/subject/wtgfpltx.html