2016-09-13 16 views
0

我在看这个实施范围滑块:https://github.com/warchimede/RangeSlider,我看到它有一个lowerValue和upperValue默认设置为0.2和0.8:如何使用范围滑块与日期而不是数字在Swift中?

@IBInspectable var lowerValue: Double = 0.2 { 
    didSet { 
     if lowerValue < minimumValue { 
      lowerValue = minimumValue 
     } 
     updateLayerFrames() 
    } 
} 

@IBInspectable var upperValue: Double = 0.8 { 
    didSet { 
     if upperValue > maximumValue { 
      upperValue = maximumValue 
     } 
     updateLayerFrames() 
    } 
} 

它还具有minimumValue和maximumValue设置为0和1:

@IBInspectable var minimumValue: Double = 0.0 { 
    willSet(newValue) { 
     assert(newValue < maximumValue, "RangeSlider: minimumValue should be lower than maximumValue") 
    } 
    didSet { 
     updateLayerFrames() 
    } 
} 

@IBInspectable var maximumValue: Double = 1.0 { 
    willSet(newValue) { 
     assert(newValue > minimumValue, "RangeSlider: maximumValue should be greater than minimumValue") 
    } 
    didSet { 
     updateLayerFrames() 
    } 
} 

我想改变这个滑块的行为,使之成为范围的日期选择器 - 该maximumValue应该是当前的日期和minimumValue一些过去的日期,如6个月前。 你可以帮我解决这个问题,并提供一些提示,是否可以用这个范围滑块来做到这一点?

回答

2

这应该做到这一点。

class ViewController: UIViewController { 

    var slider:UISlider? 
    // These number values represent each slider position 
    let daysInPast = [14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0] //Add your values here - this sets from two past weeks to current day 
    let secondsPerDay = 86400 
    var oldIndex = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     slider = UISlider(frame: self.view.bounds) 
     self.view.addSubview(slider!) 

     // slider values go from 0 to the number of values in your numbers array 
     var numberOfSteps = Float(numbers.count - 1) 
     slider!.maximumValue = numberOfSteps; 
     slider!.minimumValue = 0; 

     // As the slider moves it will continously call the -valueChanged: 
     slider!.continuous = true; // false makes it call only once you let go 
     slider!.addTarget(self, action: "valueChanged:", forControlEvents: .ValueChanged) 
    } 

    func valueChanged(sender: UISlider) { 
     // round the slider position to the nearest index of the numbers array 
     var index = (Int)(slider!.value + 0.5); 
     slider?.setValue(Float(index), animated: false) 
     var dayInPast = daysInPast[index]; // <-- This numeric value you want 

     if oldIndex != index { 

      let today = NSDate() //today 
      //every day value in the slider will be multiplied by number of seconds in day 
      let pickedDate = today.dateByAddingTimeInterval(-secondsPerDay * dayInPast) 
      let calendar = NSCalendar.currentCalendar() 
      let components = calendar.components([.Month, .Year, .Day], fromDate: pickedDate) 
      let month = components.month 
      let year = components.year 
      let day = components.day 

      print("Date picked with slider is \(month)/\(day), \(year)") 

      oldIndex = index 
     } 
    } 
} 
+0

谢谢,但是我想做一个范围日期时间选择器,所以用户可以选择一个范围在2个日期之间 - 他可以修改滑块上的两个日期。在你的解决方案中只有一个日期选择:( – user3766930

+0

你没有在你的OP中提到过,也就是说,上面的代码可以很容易地适应使用自定义范围 - 只需你一点点努力。 –