2017-08-24 8 views
0

enter image description here次の出力を得るためにUIDatePickerをカスタマイズする方法は?

これは、入力として、日が含まピッカー、日付、および月で、また、1つのスクロールでは、IOSのピッカー/日付ピッカーからこの種の機能を実現する方法はありますか?

+0

何代わりにUIPickerViewとしてそれを作るでしょうか? –

+0

これは通常の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

FYI、答えを受け入れると: - 回答者に15の評判ポイントを与えます。 - あなた(尋問者)+2評判ポイントを与える。 - そして、最も重要なことは、この答えが視聴者にとってのこのような問題の解決策であることを示しています。 –

1

以下の手順を実行してください。 -
1. を入力して日付を変更する必要があります。
2. UIPickerViewDatasourceメソッドについては、NSArrayまたはNSMutableArrayにすべての日付(文字列形式)を保存します。
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

その場合、答えを受け入れてupvoteを渡して、他のSO訪問者が自分の問題を解決するためのコードに上記のコードを適用できるようにします。ありがとうございました。 – shahnilay86

+0

私は彼が望む視覚的な出力をどのように作り出すのか分かりません –

関連する問題