Ios 可一次选择两次的自定义选择器

Ios 可一次选择两次的自定义选择器,ios,swift,ios8,uidatepicker,Ios,Swift,Ios8,Uidatepicker,如何在iOS中设计此屏幕 一次可以选择两次,如果可能的话,方法是什么?我搜索了很多,但没有找到任何自定义UIDatePicker的示例,因为您正在寻找,但您可以查看此示例并创建自己的选取器。它不是特定的日期选取器,而是选取器视图,您可以根据需要进行编码 我搜索了很多,但没有找到任何自定义UIDatePicker的示例,因为您正在寻找,但您可以查看此示例并创建自己的选择器。它不是特定的日期选择器,而是选择器视图,您可以根据需要对其进行编码 我希望最好使用选项卡栏类型的选择器视图,我们可以通过两个

如何在iOS中设计此屏幕


一次可以选择两次,如果可能的话,方法是什么?

我搜索了很多,但没有找到任何自定义UIDatePicker的示例,因为您正在寻找,但您可以查看此示例并创建自己的选取器。它不是特定的日期选取器,而是选取器视图,您可以根据需要进行编码


我搜索了很多,但没有找到任何自定义UIDatePicker的示例,因为您正在寻找,但您可以查看此示例并创建自己的选择器。它不是特定的日期选择器,而是选择器视图,您可以根据需要对其进行编码


我希望最好使用选项卡栏类型的选择器视图,我们可以通过两个不同的按钮处理开始日期和结束日期。我已经展示了一个示例图像。我希望你能从给出的图片中理解

当选择
开始
按钮时,
UIDatePicker
将改变开始日期
标签
当选择
结束
按钮时,
UIDatePicker
将改变结束日期
标签

我希望最好使用选项卡栏类型的选择器视图,我们可以通过两个不同的按钮处理开始日期和结束日期。我已经展示了一个示例图像。我希望你能从给出的图片中理解

当选择
开始
按钮时,
UIDatePicker
将改变开始日期
标签
当选择
结束
按钮时,
UIDatePicker
将改变结束日期
标签

谢谢@Sudhin Davis这是个好主意,但最后我决定继续,不改变UI。我从@Harry的评论中找到了解决方案。这是我为修复它所做的

let maxV = 25000
override func awakeFromNib() {
    self.pickerVIew.delegate = self
    self.pickerVIew.dataSource = self
    self.pickerViewLoaded(0, component: 0)
    self.pickerViewLoaded(0, component: 1)
    self.pickerViewLoaded(0, component: 3)
    self.pickerViewLoaded(0, component: 4)

}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int
{
    return 6
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
{
    if(component == 2 || component == 5)
    {
        return 2
    }
    else
    {
        return maxV
    }
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!
{
    if(component == 0 || component == 3)
    {
        return String(format: "%02d", (row%12)+1)
    }
    else if(component == 1 || component == 4)
    {

        return String(format: "%02d", (row%12)*5)
    }
    else
    {
        return row == 0 ? "AM" : "PM"
    }
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    self.pickerViewLoaded(row,component: component)
}
func pickerViewLoaded(row:Int,component:Int)
{
    var base12 = (maxV/2)-(maxV/2)%12;
    self.pickerVIew.selectRow(row%12+base12, inComponent: component, animated: false)
}

谢谢@Sudhin Davis这是个好主意,但最后我决定继续,UI没有任何变化。我从@Harry的评论中找到了解决方案。这是我为修复它所做的

let maxV = 25000
override func awakeFromNib() {
    self.pickerVIew.delegate = self
    self.pickerVIew.dataSource = self
    self.pickerViewLoaded(0, component: 0)
    self.pickerViewLoaded(0, component: 1)
    self.pickerViewLoaded(0, component: 3)
    self.pickerViewLoaded(0, component: 4)

}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int
{
    return 6
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
{
    if(component == 2 || component == 5)
    {
        return 2
    }
    else
    {
        return maxV
    }
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!
{
    if(component == 0 || component == 3)
    {
        return String(format: "%02d", (row%12)+1)
    }
    else if(component == 1 || component == 4)
    {

        return String(format: "%02d", (row%12)*5)
    }
    else
    {
        return row == 0 ? "AM" : "PM"
    }
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    self.pickerViewLoaded(row,component: component)
}
func pickerViewLoaded(row:Int,component:Int)
{
    var base12 = (maxV/2)-(maxV/2)%12;
    self.pickerVIew.selectRow(row%12+base12, inComponent: component, animated: false)
}

您可以创建一个具有2个UIDatePicker的自定义视图,并将它们放在UIStackView中。您还可以在上面添加标签。以下是执行此操作的示例视图:

class IntervalPickerView: BaseView {
@IBOutlet weak var startDatePicker: UIDatePicker!
@IBOutlet weak var endDatePicker: UIDatePicker!

weak var delegate: IntervalPickerDelegate?

override func postInit() {
    startDatePicker.addTarget(self, action: #selector(datePickerValueChanged(_:)), for: .valueChanged)
    endDatePicker.addTarget(self, action: #selector(datePickerValueChanged(_:)), for: .valueChanged)
}

@objc func datePickerValueChanged(_ sender: UIDatePicker){
    let dateFormatter: DateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"
    let selectedTime = dateFormatter.string(from: sender.date)
    delegate?.didPickTime(selectedTime, isStart: sender == startDatePicker)
  }
 }

您可以创建一个具有2个UIDatePicker的自定义视图,并将它们放在UIStackView中。您还可以在上面添加标签。以下是执行此操作的示例视图:

class IntervalPickerView: BaseView {
@IBOutlet weak var startDatePicker: UIDatePicker!
@IBOutlet weak var endDatePicker: UIDatePicker!

weak var delegate: IntervalPickerDelegate?

override func postInit() {
    startDatePicker.addTarget(self, action: #selector(datePickerValueChanged(_:)), for: .valueChanged)
    endDatePicker.addTarget(self, action: #selector(datePickerValueChanged(_:)), for: .valueChanged)
}

@objc func datePickerValueChanged(_ sender: UIDatePicker){
    let dateFormatter: DateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"
    let selectedTime = dateFormatter.string(from: sender.date)
    delegate?.didPickTime(selectedTime, isStart: sender == startDatePicker)
  }
 }

为什么不将UIPickerView与6列一起使用?@哈利已经尝试过,但无法连续滚动(即,循环滚动)为什么不将UIPickerView与6列一起使用?@哈利已经尝试过,但无法连续滚动(即,循环滚动)到目前为止,我只尝试了这个,但是我在UIPickerviewController中阻止了组件的循环滚动。我现在只尝试这个,但是我在UIPickerviewController中阻止了组件的循环滚动