自定义选择器,可以一次选择两次。

问题描述 投票:0回答:4

在iOS中如何设计这个画面。

enter image description here

它可以一次选择两次,如果可以的话,有什么方法吗?

ios swift ios8 uidatepicker
4个回答
4
投票

谢谢 @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)
}

1
投票

我希望最好使用标签栏式的选择器视图,我们可以通过2个不同的按钮来处理开始日期和结束日期。我已经展示了一个示例图片。我希望你能从图片中理解。

starts 按钮被选中 UIDatePicker 将改变开始日期 label 而当 ends 按钮,选择了 UIDatePicker 将改变结束日期 label.enter image description here


1
投票

你可以创建一个有2个UIDatePickers的自定义视图,并把它们放在一个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)
  }
 }

0
投票

我找了很多,但没有找到任何你所寻找的自定义UIDatePicker的例子,但你可以看看这个。联系 并创建一个自己的拾取器,它不会是那个特定的日期拾取器,但它将是一个拾取器视图,你可以根据你的要求进行编码。

iOS编程秘籍9:为UIPickerView添加多列功能。

© www.soinside.com 2019 - 2024. All rights reserved.