【问题标题】:How to customise UIDatePicker to achieve the following output?如何自定义UIDatePicker实现如下输出?
【发布时间】:2017-08-24 07:04:48
【问题描述】:

这是包含日期、日期和月份作为输入的选择器,而且,在一个滚动中,有没有办法从 iOS 中的选择器/日期选择器中实现这种功能?

【问题讨论】:

  • 把它改成 UIPickerView 怎么样?
  • 使用普通 UIPickerView 可以做到
  • 如何给这个输入@AhmadF
  • 输入应该是当月的天数吧?

标签: ios swift date uidatepicker picker


【解决方案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())!
    }
}

【讨论】:

  • 谢谢,这是我想要的终极解决方案
  • 仅供参考,接受答案会导致: - 给予回答者 +15 声望点。 - 给你(询问者)+2 声望点。 - 最重要的是,它表明这个答案是针对观众的此类问题的解决方案。
【解决方案2】:

执行以下步骤:-
1. 申请DateFormatter()必须更改日期。
2. 为您的UIPickerView Datasource 方法将所有日期(字符串格式)保存在您的NSArrayNSMutableArray 中。
3.然后调用UIPickerViewDatasourceDelegate方法来获取你的结果。

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

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

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

【讨论】:

  • 如果它有效,那么接受答案并放弃投票,以便其他 SO 访问者可以在他们的代码中应用上述代码来解决他们的问题。谢谢。
  • 我不明白这如何产生他想要的视觉输出
  • @Daij-Djan 我给出了一个确切的问题解决方案。对于视觉输出,开发人员必须开发一种功能。
  • 问题是“如何自定义UIDatePicker实现如下输出?” ...你不回答它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2016-07-06
相关资源
最近更新 更多