**//
// UICustomPrefPicker.swift
// ANAPAY
//
// Created by DBS部 电通国际情报サービス on 2019/11/12.
// Copyright © 2019 isid. All rights reserved.
//
import UIKit
final class CustomSexPicker {
/// ピカー作成するIF
/// - Parameter textField: 纽づくUITextfield
static func create(textField: UITextField) {
CustomListPicker.shared.create(textField: textField, dataList: Constants.SEX_CODE_LIST)
}
}
final class CustomPrefPicker {
/// ピカー作成するIF
/// - Parameter textField: 纽づくUITextfield
static func create(textField: UITextField) {
CustomListPicker.shared.create(textField: textField, dataList: Constants.PREF_CODE_LIST)
}
}
struct CustomPickerSet {
//UITextfieldに纽づいてる
weak var textField: UITextField?
//UITextfieldと纽付くPickerView
var pickView: UIPickerView
//Picker関连デリゲート
var source: CustomPickerSource
/// 初期化する
/// - Parameter textField: 纽づくUITextfield
init(textField: UITextField, dataList: [String]) {
self.textField = textField
self.pickView = UIPickerView()
self.source = CustomPickerSource()
self.source.dataList = dataList
self.textField?.inputView = self.pickView
self.pickView.delegate = source
self.pickView.dataSource = source
self.pickView.showsSelectionIndicator = true
}
}
// テキストに値を设定する
extension CustomPickerSet {
mutating func done() {
self.textField?.text = self.source.dataList[self.pickView.selectedRow(inComponent: 0)]
self.textField?.endEditing(true)
}
}
// デレゲートとデータリソースを実装
class CustomPickerSource: UIControl, UIPickerViewDelegate, UIPickerViewDataSource {
//ピカーのリスト
var dataList: [String] = []
/// ピカーを1列に设定する
/// - Parameter pickerView: 対象のpickerView
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
/// ピカーのデーター数を设定する
/// - Parameter pickerView: 対象のpickerView
/// - Parameter component: 列番
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dataList.count
}
/// ピカーの表示値を设定する
/// - Parameter pickerView: 対象のpickerView
/// - Parameter row: インデクス
/// - Parameter component: 列番
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return dataList[row]
}
}
class CustomerPickButtonItem: UIBarButtonItem {
var cPicker: CustomPickerSet?
}
final class CustomListPicker:NSObject {
static let shared = CustomListPicker()
private override init() {
super.init()
}
/// ピカー作成するIF
/// - Parameter textField: 纽づくUITextfield
func create(textField: UITextField, dataList: [String]) {
let cPicker = CustomPickerSet(textField: textField, dataList: dataList)
// 决定バーの生成
let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: cPicker.pickView.frame.size.width, height: 30))
let spaceItem = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: self, action: nil)
let doneItem = CustomerPickButtonItem(title: "完了", style: .done, target: self, action: #selector(done(_:)))
doneItem.tintColor = UIColor.init(hexcode: "#5BADE1")
doneItem.cPicker = cPicker
toolbar.setItems([spaceItem, doneItem], animated: false)
toolbar.sizeToFit()
// インプットビュー设定(纽づいているUITextfieldへ代入)
cPicker.textField?.inputAccessoryView = toolbar
cPicker.textField?.delegate = self
}
/// UIPrefPickerのDoneを押したら発火
/// - Parameter sender: 决定ボタン対象
@objc func done(_ sender: CustomerPickButtonItem) {
sender.cPicker?.done()
}
}
extension CustomListPicker: UITextFieldDelegate {
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
textField.isUserInteractionEnabled = false
return true
}
func textFieldDidEndEditing(_ textField: UITextField) {
textField.isUserInteractionEnabled = true
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
return false
}
}**
性别と地域的数据源
class Constants {
/// 都道府県リスト
static let PREF_CODE_LIST = [
"",
"北海道", "青森県", "岩手県", "宫城県", "秋田県", "山形県", "福岛県", "茨城県",
"栃木県", "群马県", "埼玉県", "千叶県", "东京都", "神奈川県", "新潟県", "富山県",
"石川県", "福井県", "山梨県", "长野県", "岐阜県", "静冈県", "爱知県", "三重県",
"滋贺県", "京都府", "大阪府", "兵库県", "奈良県", "和歌山県", "鸟取県", "岛根県",
"冈山県", "広岛県", "山口県", "徳岛県", "香川県", "爱媛県", "高知県", "福冈県",
"佐贺県", "长崎県", "熊本県", "大分県", "宫崎県", "鹿児岛県", "冲縄県"
]
/// 性别リスト
static let SEX_CODE_LIST = [
"",
"男性", "女性", "その他"
]
}