2010-03-25 12 views

उत्तर

150

इस तरह लक्ष्य जोड़ें:

slider.continuous = YES; 
[slider addTarget:self 
     action:@selector(valueChanged:) 
     forControlEvents:UIControlEventValueChanged]; 

और valueChanged समारोह में 5.

[slider setValue:((int)((slider.value + 2.5)/5) * 5) animated:NO]; 
+0

मैं ईमानदारी से बेवकूफ लग रहा है। यह ALW है सरल चीजें हैं जो मुझे प्राप्त करती हैं। –

+1

धन्यवाद, मुझे इसके बारे में ज्यादा सोचने से बचें ^^ मैंने थोड़ा बदलाव किया है हालांकि: int increment = 10; [numberOfAppsInFutur setValue: ((int) ((numberOfAppsInFutur.value + increment/2।)/Increment) * increment) एनिमेटेड: नहीं]; –

+0

यदि यह मदद करता है, तो यहां एक पूर्ण उदाहरण है [यहां] (http://stackoverflow.com/a/8219848/168594)। – zekel

5

द्वारा कि विभाज्य है सबसे करीब मान के लिए मान सेट सक्रिय स्टेपर के लिए एक और तरीका नहीं है कार्यक्षमता। एक सामान्य स्थिति में काम करता है

उदाहरण:

डेटा की श्रेणी 0 है - 2800 और मैं वेतन वृद्धि 25 यूनिट मूल्यों में होना चाहता हूँ। (MaxRange/unitsteps) - मैं निम्नलिखित

  1. 0 होने के लिए स्लाइडर की सीमा की स्थापना करना होगा।
  2. जब मूल्य परिवर्तित विधि उपयोग (int) स्लाइडर.वल्यू * यूनिटस्टेप्स चलाता है। (पूर्णांक) slider.value 112 और मेरे कोड होगा * 25.

    आप तो एक पाठ क्षेत्र है, तो यह है कि -

मेरी स्लाइडर ऊपर के उदाहरण में

लेकर 0 आईबी में निर्धारित किया जाएगा प्रत्यक्ष इनपुट के लिए संशोधित किया जा सकता है, आप केवल स्लाइडर मान को [textfield.text intValue]/unitsteps पर विपरीत सेट करेंगे।

+0

इसका एक दुष्प्रभाव यह है कि यह टेक्स्टफील्ड मान को सीमा लागू करने में मदद कर सकता है ... –

+0

यह मेरे लिए सही समाधान लग रहा था। – Umair

5

स्विफ्ट वाक्य रचना की तलाश में किसी को भी के लिए ...

override func viewDidLoad() { 
    super.viewDidLoad() 
    mySlider.addTarget(self, action: "sliderValueDidChange:", forControlEvents: .ValueChanged) 
} 

func sliderValueDidChange(sender:UISlider!) 
{ 
    //Set value to the nearest 5... 
    print((Float)((Int)((sender.value + 2.5)/5) * 5)) 
    sender.setValue((Float)((Int)((sender.value + 2.5)/5) * 5), animated: false) 
} 

वैकल्पिक रूप से, सिर्फ सहायक संपादक (जो मैं अंत में किया था) के साथ एक कार्रवाई समारोह बनाने ...

@IBAction func mySliderValueChanged(sender: UISlider) { 
    //Set value to the nearest int 
    sender.setValue(Float(roundf(sender.value)), animated: false) 

} 
27

एक थोड़ा स्विफ्ट में अधिक सुरुचिपूर्ण समाधान कुछ ऐसा हो सकता है

let step: Float = 5 
@IBAction func sliderValueChanged(sender: UISlider) { 
    let roundedValue = round(sender.value/step) * step 
    sender.value = roundedValue 
    // Do something else with the value 

} 

इस तरह आप स्टी 5 का पीएस। आप मेरे post में सेटअप के बारे में और अधिक पढ़ सकते हैं।

-4
1. In storyboard mode, drag and drop a stepper and label. the label will show the stepper values. 
  1. लेफ्ट क्लिक और दुकानों के रूप में अपने दृश्य नियंत्रक करने के लिए दोनों लेबल और स्टेपर खींचें।

नाम लेबल के रूप में "stepperValue"

  1. ड्रैग और ड्रॉप स्टेपर फिर से यह एक func- बनाने मैं मेरा "समारोह" कहा जाता है

@IBAction समारोह inc (प्रेषक: AnyObject) {
stepperValue.text = "(Int (stepper।मूल्य) * 5) "

स्टेपर क्लिक करें और इसे वेतन वृद्धि +/- 7 के साथ तेजी से 3, स्लाइडर में 5

+1

कृपया अधिक पढ़ने योग्यता के लिए अपना उत्तर संपादित करें। –

4

द्वारा बढ़ा देगा:

@IBOutlet weak var sldComponent: UISlider! 

...

sldComponent.addTarget(self, action: #selector(_sldComponentChangedValue),for: .valueChanged) 

...

func _sldComponentChangedValue(sender: UISlider!) { 

     self.sldComponent.setValue((round(sender.value/7) * 7), animated: false) 
     print("\(sender.value)") 

} 
संबंधित मुद्दे