可展开选择器 1.1.6

可展开选择器 1.1.6

Fishbowl Inventory 维护。



  • FishbowlInventory

可展开选择器

CI Status Version License Platform

优势

  • 选择列表中的任何项目。
  • 当选择某些内容时,将通知代理。
  • 根据 parentId 展开/收缩。
  • 排序将为您自动进行(按字母顺序升序)。
  • 可以以模态/推入的形式显示。
  • 可以自定义尖括号按钮的颜色。
  • 可以选择三种内置的样式选项
    • 箭头(根级无缩进图像)
    • 无(无缩进图像)
    • 自定义(传递您自己的图像)
  • 自定义缩进类型可以有一个可选的 '展开图像',并且会有动画效果。
  • 可以自定义每个级别的缩进图像的颜色。
  • 支持暗黑模式和亮色模式。
  • 支持横屏和竖屏。
  • 条形码/二维码扫描!

示例

运动-
picture
行缩进类型 箭头缩进类型 无缩进类型 自定义缩进类型 搜索
picture picture picture picture picture

要运行示例项目,请先克隆仓库,然后从 Example 目录中运行 pod install

需求

  • iOS > 12.0

安装

可通过 CocoaPods 获取 ExpandablePicker。要安装它,只需将以下行添加到 Podfile 中

pod 'ExpandablePicker'

用法

import UIKit
import ExpandablePicker

struct Project {
    let id: String
    let title: String
    let parentId: String?
}

class ViewController: UIViewController {
    
    var myPretendData = [Project]()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // my pretend api call
        // populate my data
        let deathStar = Project(id: "1", title: "Death Star", parentId: nil)
        let detentionBlock = Project(id: "10", title: "Detention Block", parentId: "1")
        let cellaa23 = Project(id: "100", title: "Cell AA-23", parentId: "10")
        let emperorsThroneRoom = Project(id: "11", title: "Emperor's Throne Room", parentId: "1")
        let tractorBeamControl = Project(id: "12", title: "Tractor Beam Control", parentId: "1")
        let hangar272 = Project(id: "13", title: "Hangar 272", parentId: "1")
        
        // if you want barcode / qr code scanning, add `scanMatchable:` paramter.  (any string you pass in that array will match barcode/qrcode)
        
        // does not matter what order items are placed
        myPretendData.append(contentsOf: [hangar272, cellaa23, detentionBlock, tractorBeamControl, deathStar, emperorsThroneRoom])
    }
    
    @IBAction func lineVersionPressed(_ sender: Any) {
        
        // convert data to picker data
        let pickerData = myPretendData.map { (project) -> PickerData in
            PickerData(id: project.id, title: project.title, parentId: project.parentId)
        }
        
        let vc = PickerViewController()
        vc.set(title: "My Storm Trooper", subtitle: "Death to all rebels")
        vc.datasource.data = pickerData
        vc.delegate = self
        let nc = UINavigationController(rootViewController: vc)
        present(nc, animated: true, completion: nil)
    }
}

extension ViewController: PickerProtocol {
    
    func didSelectPickerData(with id: String, pvc: PickerViewController) {
        
        guard let d = myPretendData.filter({ $0.id == id }).first else { return }
        
        pvc.dismiss(animated: true) { [weak self] in
            guard let s = self else { return }
            let alert = UIAlertController(title: "Selected", message: "\(d.title) was selected.", preferredStyle: .alert)
            s.present(alert, animated: true, completion: nil)
            DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
                alert.dismiss(animated: true, completion: nil)
            }
        }
    }
}

作者

Fishbowl Inventory (KraigWastlund)

许可

ExpandablePicker 遵循 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。