2017-02-08 20 views
-1

Я пытаюсь создать слайдер таким образом, чтобы при начальной загрузке приложения ползунок имел значение по умолчанию, например 5. Но если бы я изменил значение ползунка на 10 , и покиньте VC и вернитесь, я бы хотел, чтобы значение было 10. Я попытался реализовать это в своем приложении, но каждый раз, когда я возвращаюсь к VC после ухода, значение сбрасывается до значения, которое я дал ему в StoryBoard , Мой код делает это, делая значение 0 в 1 (что всегда будет иметь место при первом запуске кода), но я не считаю, что он изящный, и есть лучшие альтернативы. Я думаю, что я не правильно использую viewDidAppear и viewDidLoad, но я не совсем уверен, как улучшить код. Ниже моя попытка:Значение Swift Slider продолжает меняться до значения StoryBoard

var distanceMap: Int = Int() 


import UIKit 


class MapSettingsVC: UIViewController { 

    //IBOutlet for the slider 
    @IBOutlet weak var rangeSlider: UISlider! 

    // label for slider value 
    @IBOutlet weak var distanceLabel: UILabel! 

    //changes to slider value 
    @IBAction func distanceRange(_ sender: UISlider) { 

     distanceMap = Int(sender.value) 
     distanceLabel.text = String(distanceMap) 
    } 

    // iboutlet to go to another viewController 
    @IBAction func backButtonTapped(_ sender: AnyObject) { 
     self.performSegue(withIdentifier: "mapSettingsGoBack", sender: self) 
    } 






override func viewDidAppear(_ animated: Bool) { 



    rangeSlider.value = Float(distanceMap) 
    distanceLabel.text = String(Int(rangeSlider.value)) 

    // I have initialized the label to be 0, so this will be FIRST value when the VC is loaded, and the if statement always runs the first time 
    if distanceLabel.text == "0" { 
     rangeSlider.value = 1 
     distanceLabel.text = "1" 

    } 



} 
override func viewDidLoad() { 
    super.viewDidLoad() 

} 

В идеале я бы не хотел ползунок, чтобы даже иметь возможность «0», и есть по умолчанию установлено значение 5.

ответ

0

Мне удалось найти такой способ, что мне не нужно иметь 0 в слайдере.

//initialize the global variable that way this is the first thing the slider will change to 
var distanceMap: Int = 5 


override func viewDidAppear(_ animated: Bool) { 

    rangeSlider.value = Float(distanceMap) 
    distanceLabel.text = String(Int(rangeSlider.value)) 

} 

Значение ползунка теперь будет 5 в первый раз, и переменная может быть изменена и обновлена ​​в порядке.

+0

Вы осознаете, что пользователь снова перезапустил приложение и триггеры ViewDidLoad, значение ползунка по умолчанию вернется к 5. Мне требуется аналогичная глобальная переменная для хранения и использования в моем приложении для UISlider. –

1

Если вы уезжаете контроллер представления , почти наверняка верно, что вы уничтожаете его, и когда вы пытаетесь вернуться, он создается снова. Например, если вы используете segues, это будет так.

Если вы не используете навигационный контроллер и не нажмете на него контроллер вида, контроллер будет создан снова с нуля, поэтому значение будет установлено на ползунок, установленный в раскадровке.

В другой теме, на самом деле не очень хорошая практика иметь такой код, как distanceMap вне класса, это может привести к странному поведению. Лучшая практика заключается в том, чтобы иметь такую ​​ценность внутри класса.

Чтобы достичь того, что вы пытаетесь, вы должны отправить значение слайда, хотя ваши VC, или сохранить его где-то в другом месте. Первый вариант действительно не изящный, поэтому второй будет лучшим.

Например, сохраните его в одноэлементном режиме, который живет через всю жизнь приложения, и вы можете запросить значение для singleton всякий раз, когда появляется этот VC. Всякий раз, когда пользователь меняет значение в слайдере, вы устанавливаете его в singleton. Еще одно решение - сохранить его в базе данных, но это выглядит излишним.

 Смежные вопросы

  • Нет связанных вопросов^_^