2016-09-13 17 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中提到過,也就是說,上面的代碼可以很容易地適應使用自定義範圍 - 只需你一點點努力。 –