McPicker 3.0.0

McPicker 3.0.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布时间最后发布日期2020年9月
SPM支持 SPM

Kevin McGill维护。



McPicker 3.0.0

  • 作者:
  • Kevin McGill

McPicker

Build Status Version License Platform

关于

McPicker 是一个具有动画效果的 UIPickerView 即插即用解决方案,支持旋转。传递的字符串数组越多,得到的选择器组件就越多。您可以设置自定义标签或使用默认值。McPicker 可以通过使用 showAsPopover 在 iPhone 或 iPad 上以弹出视图的形式显示,使用 McTextFieldinputView 的形式使用,或者使用默认的上下滑动样式 show

showAsPopover 可以用于从 UIViewUIBarButtonItem 显示。当在 iPhone 上使用时,showAsPopover 总是以弹出视图的形式显示。

使用

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

简短语法

  • 正常 - (从底部滑动上来)
McPicker.show(data: [["Kevin", "Lauren", "Kibby", "Stella"]]) {  [weak self] (selections: [Int : String]) -> Void in
    if let name = selections[0] {
        self?.label.text = name
    }
}
  • 作为弹出视图
let data: [[String]] = [["Kevin", "Lauren", "Kibby", "Stella"]]
McPicker.showAsPopover(data: data, fromViewController: self, barButtonItem: sender) { [weak self] (selections: [Int : String]) -> Void in
    if let name = selections[0] {
        self?.label.text = name
    }
}
  • 通过 McTextField 作为 inputView
@IBOutlet weak var mcTextField: McTextField!
override func viewDidLoad() {
    let data: [[String]] = [["Kevin", "Lauren", "Kibby", "Stella"]]
    let mcInputView = McPicker(data: data)
    mcInputView.backgroundColor = .gray
    mcInputView.backgroundColorAlpha = 0.25
    mcTextField.inputViewMcPicker = mcInputView

    mcTextField.doneHandler = { [weak mcTextField] (selections) in
        mcTextField?.text = selections[0]!
    }
    mcTextField.selectionChangedHandler = { [weak mcTextField] (selections, componentThatChanged) in
        mcTextField?.text = selections[componentThatChanged]!
    }
    mcTextField.cancelHandler = { [weak mcTextField] in
        mcTextField?.text = "Cancelled."
    }
    mcTextField.textFieldWillBeginEditingHandler = { [weak mcTextField] (selections) in
        if mcTextField?.text == "" {
            // Selections always default to the first value per component
            mcTextField?.text = selections[0]
        }
    }
}

定制

let data: [[String]] = [
    ["Sir", "Mr", "Mrs", "Miss"],
    ["Kevin", "Lauren", "Kibby", "Stella"]
]
let mcPicker = McPicker(data: data)

let customLabel = UILabel()
customLabel.textAlignment = .center
customLabel.textColor = .white
customLabel.font = UIFont(name:"American Typewriter", size: 30)!
mcPicker.label = customLabel // Set your custom label

let fixedSpace = McPickerBarButtonItem.fixedSpace(width: 20.0)
let flexibleSpace = McPickerBarButtonItem.flexibleSpace()
let fireButton = McPickerBarButtonItem.done(mcPicker: mcPicker, title: "Fire!!!") // Set custom Text
let cancelButton = McPickerBarButtonItem.cancel(mcPicker: mcPicker, barButtonSystemItem: .cancel) // or system items
// Set custom toolbar items
mcPicker.setToolbarItems(items: [fixedSpace, cancelButton, flexibleSpace, fireButton, fixedSpace])

mcPicker.toolbarItemsFont = UIFont(name:"American Typewriter", size: 17)!
mcPicker.toolbarButtonsColor = .white
mcPicker.toolbarBarTintColor = .darkGray
mcPicker.backgroundColor = .gray
mcPicker.backgroundColorAlpha = 0.50
mcPicker.pickerBackgroundColor = .gray
mcPicker.pickerSelectRowsForComponents = [
    0: [3: true],
    1: [2: true] // [Component: [Row: isAnimated]
]

if let barButton = sender as? UIBarButtonItem {
    // Show as Popover
    //
    mcPicker.showAsPopover(fromViewController: self, barButtonItem: barButton) { [weak self] (selections: [Int : String]) -> Void in
        if let prefix = selections[0], let name = selections[1] {
            self?.label.text = "\(prefix) \(name)"
        }
    }
} else {
    // Show Normal
    //
    mcPicker.show(doneHandler: { [weak self] (selections: [Int : String]) -> Void in
        if let prefix = selections[0], let name = selections[1] {
            self?.label.text = "\(prefix) \(name)"
        }
    }, cancelHandler: {
        print("Canceled Styled Picker")
    }, selectionChangedHandler: { (selections: [Int:String], componentThatChanged: Int) -> Void  in
        let newSelection = selections[componentThatChanged] ?? "Failed to get new selection!"
        print("Component \(componentThatChanged) changed value to \(newSelection)")
    })
}
选择

McPicker 的 doneHandler 使用参数 selections: [Int : String] 返回。这和从您传入的 data 中得到的结果一样简单,即 [<Component Index>: <Selection String>]

要求

  • iOS 8+
  • Swift 5.2
  • Xcode 12

注意:从 0.5.1 版本开始,McPicker 使用 Swift 4 编译器。请确保在项目中设置了正确的编译器。如果您想使用 Swift 3,请使用版本 <=0.5.0。

安装

McPicker 可以通过 CocoaPods 获取。要安装它,请将以下行添加到您的 Podfile 中

pod "McPicker"

Xcode 12+ - Swift 5.2 支持

pod 'McPicker', '~> 3.0.0'

Swift 4.2 支持

对于 Swift 4.2 支持,请使用版本 2.0.0

pod 'McPicker', '~> 2.0.0'

作者

Kevin McGill, [email protected]

许可证

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