2017-08-24 81 views
0

enter image description here如何自定义UIDatePicker来实现以下输出?

这是包含星期,日期和月份作为输入选择器,同样,在一个滚动,有没有办法实现这种从iOS设备上选择器/日期选择器的功能?

+0

什么使得它作为一个UIPickerView呢? –

+0

这样可以使用Normal UIPickerView –

+0

如何给这个输入@AhmadF –

回答

1

对于这种情况,你应该将其添加为UIPickerView。假设问题是:如何在本月的日子填充它的值?使其更清晰,我会提到它的步骤:

  • 你应该得到当月开始结束日期。你可以通过检查this answer找到如何实现它。

  • 您需要在开始日期和结束日期之间获得所有日期 - 所需格式。你可以通过检查this answer找到如何实现它。

  • 在获得当月的所有日子之后,您可以轻松地填充日期选择器数据源方法。

实现:

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 

    var currentMonthDays: [String] { 
     var array = [String]() 

     var date = Date().startOfMonth() // first date 
     let endDate = Date().endOfMonth() 

     let fmt = DateFormatter() 
     //fmt.dateFormat = "dd/MM/yyyy" 
     fmt.dateFormat = "EEE dd MMM" 

     while date <= endDate { 
      date = Calendar.current.date(byAdding: .day, value: 1, to: date)! 

      array.append(fmt.string(from: date)) 
     } 

     return array 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     print(currentMonthDays) 
    } 

    // Picker View Data Soruce & delegate Methods 

    // REMARK: make sure to connect pickerview datasource/delegate to your view controller, 
    // I did it from the storyboard 
    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 1 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return currentMonthDays.count 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return currentMonthDays[row] 
    } 
} 


// Step #1: 
extension Date { 
    func startOfMonth() -> Date { 
     return Calendar.current.date(from: Calendar.current.dateComponents([.year, .month], from: Calendar.current.startOfDay(for: self)))! 
    } 

    func endOfMonth() -> Date { 
     return Calendar.current.date(byAdding: DateComponents(month: 1, day: -1), to: self.startOfMonth())! 
    } 
} 
+0

谢谢,这是我想要的最终解决方案 –

+0

很高兴帮助!不要忘记接受:) –

+0

仅供参考,接受答案将导致: - 给予回复者+15点声望点。 - 给你(提问者)+2点声望。 - 而最重要的是,它表明这个答案是解决观众的这个问题的方法。 –

1

请按以下步骤操作: -
1.您必须更改日期,并申请。
2.将您的NSArrayNSMutableArray中的所有日期(字符串格式)保存为您的UIPickerViewDatasource方法。
3.然后致电UIPickerViewDatasourceDelegate获取您的结果的方法。

对于日期转换,您可以应用以下代码。

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "EEE dd MMM" 
let currentDate = NSDate() 

let convertedDateString = dateFormatter.string(from:currentDate as Date) 
print("convertedDate: ", convertedDateString) 
+0

是的谢谢你的解决方案 –

+0

如果它的工作接受了答案并放弃了其他SO访问者可以在他们的代码中应用上面的代码来解决他们的问题。谢谢。 – shahnilay86

+0

我不知道这是如何产生他想要的视觉输出 –