2017-07-29 5 views
-2

Ich versuche gerade einen Uistepper zu inkrementieren und seinen Wert basierend auf seinem aktuellen Wert zu ändern. Der Uistepper soll als Zeitnehmer fungieren. Es wird um 5 Minuten erhöht, bis es 60 Minuten erreicht, wo es dann um 60 Minuten erhöht wird. Sobald es 120 Minuten erreicht, möchte ich den Stepper um 1440 Minuten erhöhen, was 1 Tag ist. Mein Code hat jedoch Probleme, und ein anderes Problem, auf das ich stoße, ist das Verringern des Steppers, so dass Sie von einem Tag zurück zu einer Stunde und dann zurück zu Minuten gehen können.Inkrement UIStepper Wert basierend auf Minute, Stunde, Tag usw. SWIFT

Dies ist mein Code jetzt:

func stepperValueChanged(stepper: UIStepper) { 
    var value = Int(stepper.value) 
    stepper.minimumValue = 0 
    if (stepper.value != 0 && stepper.value <= 60) { 
     stepper.stepValue = 5 
     stepper.value -= 5 
     stepper.value += 5 
     value = Int(stepper.value) 
     reminderSubLabel.text = "\(value) minutes before" 
     if stepper.value == 60 { 
     reminderSubLabel.text = "\(value/60) hour before" 
     } 
    } else if stepper.value >= 60 && stepper.value <= 180 { 
     if stepper.value == 60 { 
      reminderSubLabel.text = "\(value/60) hour before" 
      stepper.value -= 5 
      stepper.value += 60 
     } else { 
     //stepper.value = 120 
     value = Int(stepper.value/60) 
     stepper.stepValue = 60 
     stepper.value -= 60 
     stepper.value += 60 
     reminderSubLabel.text = "\(value) hours before" 
     } 
     if stepper.value == 120 { 
      stepper.value = 1440 
      stepper.value -= 1320 
      stepper.value += 1440 
      //stepper.stepValue = 1320 
     } 
    } 
    if stepper.value == 0 { 
     stepper.stepValue = 5 
     stepper.value = 0 
     reminderSubLabel.text = "At the time of the event" 

    } 
    stepper.minimumValue = 0 
    stepper.maximumValue = 20160 
    print("\(stepper.value)") 
} 
+1

Sie haben ein ernstes Design-Problem. –

+0

Sie haben "stepper.value = 5" und in der nächsten Zeile "stepper.value = 0". Das machst du auch an anderen Orten. Was ist der Zweck davon? Warum sollte der Stepper-Wert 5 und dann 0 zugewiesen werden? –

+0

@ElTomato was wäre Ihr Ansatz? Ich verstehe den Code ist chaotisch und wiederholend und ich bin nur auf der Suche nach Hilfe – ayjoy

Antwort

1

Sie sollten nicht auf den Wert Eigenschaft UIStepper binden. Versuchen Sie, eine Abstraktion zu verwenden, bei der der Wert des Steppers x ist und der Wert, den Sie in Minuten benötigen, y ist. Alles, was Sie brauchen, ist y = f (x) in stepperValueChanged (Stepper :) zu implementieren. Es ist ziemlich einfach, wenn Schritt 1 ist.

var minutes = 0 

@IBAction func stepperValueChanged(_ stepper: UIStepper) { 
    let value = Int(stepper.value) 
    var minutes = 0 
    for step in 0..<value { 
     if step <= 11 { 
      minutes += 5 
     } else if step <= 12 { 
      minutes += 60 
     } else { 
      minutes += 1440 
     } 
    } 
    self.minutes = minutes 
} 
Verwandte Themen