**//
// 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 = [
"",
"男性", "女性", "その他"
]
}