Open MansoorJafari opened 7 years ago
TBH the project seems dead dude. Sorry.
swift conversion :--
protocol FxDatePickerDelegate {
func dateSelected(datePicker: FxDatePicker!, date : NSDate!)
}
enum FxDatePickerMode {
case Date
case Time
}
class FxDatePicker: UIView, UIPickerViewDelegate, UIPickerViewDataSource, FxDatePickerDelegate {
class Component {
var calendar : Calendar
var components : DateComponents
var pickerItems : [[String]] = []
var order : [String: Int] = [:]
init() {
self.calendar = NSCalendar.current
self.components = DateComponents()
}
init(calendar : Calendar, order : [String : Int]) {
self.calendar = calendar
self.components = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: NSDate() as Date)
self.order = order
}
func select(values: [Int]) -> [Int] {
return []
}
func toDate() -> NSDate {
return calendar.date(from: components)! as NSDate
}
func getPickerItems() -> [[String]] {
return pickerItems
}
func getCurrentIndices() -> [Int] {
return []
}
}
class TimeComponent : Component {
var format : String
override init(calendar: Calendar, order : [String : Int]) {
format = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: calendar.locale)!
super.init(calendar: calendar, order: order)
if(format.contains("a")) {
pickerItems = [[String]](repeating: [], count: 3)
pickerItems[order["hour"]!] = populateHours(ampm: true)
pickerItems[order["ampm"]!] = populateAmPm()
} else {
pickerItems = [[String]](repeating: [], count: 2)
pickerItems[order["hour"]!] = populateHours(ampm: false)
}
pickerItems[order["minute"]!] = populateMinutes()
}
override func getCurrentIndices() -> [Int] {
if(format.contains("a")) {
var idx = [Int](repeating: 0, count: 3)
idx[order["hour"]!] = self.getAmPmHour()
idx[order["minute"]!] = components.minute!
idx[order["ampm"]!] = self.getAmPm()
return idx
} else {
var idx = [Int](repeating: 0, count: 2)
idx[order["hour"]!] = components.hour! - 1
idx[order["minute"]!] = components.minute!
return idx
}
}
override func select(values: [Int]) -> [Int] {
components.minute = values[order["minute"]!]
components.hour = values[order["hour"]!]
if values.count == 3 {
components.hour! += 1
if values[order["ampm"]!] == 1 {
components.hour! += 12
}
}
return []
}
func getAmPmHour() -> Int {
if components.hour == 0 {
return 11
}
if components.hour! > 12 {
return components.hour! - 13
}
return components.hour!
}
func getAmPm() -> Int {
if(self.components.hour! >= 12) {
return 1
}
return 0
}
func populateHours(ampm : Bool = true) -> [String] {
var hours : [String] = []
if ampm {
for i in 1...12 {
if i < 10 {
hours.append("0\(i)")
} else {
hours.append("\(i)")
}
}
} else {
for i in 0 ..< 24 {
if i < 10 {
hours.append("0\(i)")
} else {
hours.append("\(i)")
}
}
}
return hours
}
func populateMinutes() -> [String] {
var minutes : [String] = []
for i in 0 ..< 60 {
if i < 10 {
minutes.append("0\(i)")
} else {
minutes.append("\(i)")
}
}
return minutes
}
func populateAmPm() -> [String] {
return [
calendar.amSymbol,
calendar.pmSymbol
]
}
}
class DateComponent : Component {
override init(calendar: Calendar, order : [String : Int]) {
super.init(calendar: calendar, order: order)
pickerItems = [[String]](repeating: [], count: 3)
pickerItems[order["month"]!] = populateMonths()
pickerItems[order["year"]!] = populateYears()
pickerItems[order["day"]!] = populateDays()
}
override func getCurrentIndices() -> [Int] {
var idx = [Int](repeating: 0, count: 3)
idx[order["month"]!] = components.month! - 1
idx[order["day"]!] = components.day! - 1
idx[order["year"]!] = components.year! - 1
return idx
}
override func select(values : [Int]) -> [Int] {
components.year = values[order["year"]!] + 1
components.day = values[order["day"]!] + 1
components.month = values[order["month"]!] + 1
var vals = values
if !components.isValidDate(in: calendar) {
var correct = DateComponents()
correct.month = components.month! + 1
correct.day = 0
correct.year = components.year!
let date = calendar.date(from: correct)!
let correctDay = calendar.component(.day, from: date)
vals[order["day"]!] = correctDay - 1
components.day = correctDay
}
return vals
}
func populateDays() -> [String] {
var days : [String] = []
for i in 1...31 {
days.append("\(i)")
}
return days
}
func populateMonths() -> [String] {
return DateFormatter().monthSymbols as [String]
}
func populateYears() -> [String] {
var years : [String] = []
for i in 1...9999 {
years.append("\(i)")
}
return years
}
}
private var pickerView : UIPickerView = UIPickerView()
private var calendar : Calendar = Calendar(identifier: Calendar.Identifier.gregorian)
private var components : [[String]] = []
private var types : [String] = []
private var component : Component = Component()
var delegate : FxDatePickerDelegate!
var bgColor : UIColor! = nil
var font : UIFont = UIFont.systemFont(ofSize: UIFont.systemFontSize)
var selectedFont : UIFont! = nil
var selectedTextColor : UIColor! = nil
var textColor : UIColor = UIColor.black
var mode : FxDatePickerMode = FxDatePickerMode.Date
var locale : Locale = NSLocale.system
func createComponents() {
calendar.locale = self.locale
switch(mode) {
case FxDatePickerMode.Date:
component = DateComponent(calendar: calendar, order: ["month": 0, "day": 1, "year": 2])
case FxDatePickerMode.Time:
component = TimeComponent(calendar: calendar, order: ["hour": 0, "minute": 1, "ampm": 2])
}
let indices = component.getCurrentIndices()
for i in 0 ..< indices.count {
pickerView.selectRow(indices[i], inComponent: i, animated: false)
}
}
func initialize() {
pickerView.delegate = self
pickerView.dataSource = self
self.delegate = self
}
override init(frame: CGRect) {
super.init(frame: frame)
initialize()
}
init() {
let width = UIScreen.main.bounds.width
super.init(frame: CGRect(x: 0, y: 0, width: width, height: 216))
initialize()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
let width = UIScreen.main.bounds.width
self.frame = CGRect(x: 0, y: 0, width: width, height: 216)
initialize()
}
override func draw(_ rect: CGRect) {
super.draw(rect)
self.addSubview(pickerView)
if self.bgColor != nil {
self.backgroundColor = self.bgColor
}
pickerView.backgroundColor = self.backgroundColor
createComponents()
}
func setCurrent(values : [Int]) {
for i in 0 ..< values.count {
pickerView.selectRow(values[i], inComponent: i, animated: false)
}
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return self.component.getPickerItems().count
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return self.component.getPickerItems()[component].count
}
func getAttributedString(row: Int, inComponent: Int) -> NSAttributedString {
let selectedRow = self.pickerView.selectedRow(inComponent: inComponent)
var font : UIFont = self.font
var textColor : UIColor = self.textColor
if selectedRow == row {
if let selectedTextColor = self.selectedTextColor {
textColor = selectedTextColor
}
if let selectedFont = self.selectedFont {
font = selectedFont
}
}
let attributes = [
NSAttributedString.Key.font: font,
NSAttributedString.Key.foregroundColor: textColor
]
return NSAttributedString(string: self.component.getPickerItems()[inComponent][row], attributes: attributes)
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var values : [Int] = []
for i in 0 ..< self.component.getPickerItems().count {
values.append(pickerView.selectedRow(inComponent: i))
}
let vals = self.component.select(values: values)
for i in 0 ..< vals.count {
if vals[i] != values[i] {
pickerView.selectRow(vals[i], inComponent: i, animated: true)
pickerView.reloadComponent(i)
}
}
pickerView.reloadComponent(component)
let date = self.component.toDate()
delegate.dateSelected(datePicker: self, date: date)
}
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
var label = view as? UILabel
if label == nil {
label = UILabel()
label?.backgroundColor = UIColor.clear
label?.textAlignment = NSTextAlignment.center
}
label?.attributedText = self.getAttributedString(row: row, inComponent: component)
return label!
}
func dateSelected(datePicker: FxDatePicker!, date: NSDate!) {
return
}
}
hi
swift 3 class not exist