【问题标题】:adjusting label to slider value swift快速将标签调整为滑块值
【发布时间】:2015-08-18 19:39:10
【问题描述】:

我的 swift 项目中有一个滑块和标签。在情节提要上,我控制将滑块拖到该页面的控制器类上,并创建了一个出口和一个动作。我控制拖动另一个标签作为插座。我正在尝试根据滑块的值更新标签。我不知道我哪里出错了。

代码:

@IBOutlet weak var slider: UISlider!

@IBOutlet weak var sliderVal: UILabel!

@IBAction func sliderValueChanged(sender: UISlider) {
    var currentValue = Int(sender.value)
    println("Slider changing to \(currentValue) ?")
    sliderVal.text = "\(currentValue) Km"
} 

我可以在日志中看到正在调用 sliderValueChanged 函数,并且日志正在打印值,但标签的文本没有更新。我做错了什么?

更新

我只是在我的登录屏幕上放置了一个滑块对象和标签,并使用相同的方法和代码来更改标签文本,它可以工作,但它不会在我的标签栏控制器中工作。这是否说明了问题可能是什么?

【问题讨论】:

  • sliderVal 是否正确链接为 IBOutlet?另外,我假设您是从用户更改滑块值而不是从后台进程调用它?
  • @Chackle 通过正确链接,您到底是什么意思?我控制将 sliderVal 标签拖到我的控制器类并选择了插座选项。当用户更改值时调用它
  • 这正是我的意思。我会看看并尝试自己在这里复制这个问题。希望我能提供帮助
  • 滑块返回 0 到 1 之间的十进制值,例如 0.623457,将其解析为整数 Int(sender.value) 将返回 0 或 1

标签: ios swift uislider


【解决方案1】:

更新主队列中的滑块值

@IBAction func sliderValueChanged(sender: UISlider) {
    var currentValue = Int(sender.value)
    println("Slider changing to \(currentValue) ?")
    dispatch_async(dispatch_get_main_queue(){
        sliderVal.text = "\(currentValue) Km"
    })
}

【讨论】:

    【解决方案2】:

    类视图控制器:UIViewController {

    @IBOutlet weak var imgView: UIImageView!
    @IBOutlet weak var slideroutlet: UISlider!
    @IBOutlet weak var lblValue: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
    }
    
    @IBAction func slider(_ sender: Any) {
    
        lblValue.text = String(slideroutlet.value)
        imgView.alpha = CGFloat(slideroutlet.value)
    }
    

    【讨论】:

      【解决方案3】:

      试试这个

      var currentValue = Int(slider.value)
      println("Slider changing to \(currentValue) ?")
      startTime.text = "\(currentValue) Km"
      

      【讨论】:

      • 同样的结果。值在日志中发生变化,但在标签上没有变化
      • 也许签入一个有标签栏控制器的项目。该选项卡还有一个导航控制器。除了标准之外,我的自定义标签栏类中是否应该有任何内容: class HomeController: UIViewController {
      • 抱歉,我不确定您的意思?哪个演示?一个带有标签栏控制器的快速演示,其中一个标签中有一个滑块?
      • 好的,所以我只是在我的登录屏幕上放置了一个滑块对象和标签,并使用相同的方法和代码来更改标签文本,它可以工作,但它不会在我的标签栏控制器中工作。这是否说明了问题可能是什么?
      【解决方案4】:

      斯威夫特 3: 为其 UIControlEvents 选择 .allEvents。

      slider.addTarget(self, action: #selector(ViewController.updateKmsLabel(sender:)), for: .allEvents)
      // To use
      func updateKmsLabel(sender: UISlider!) {
          let value = Int(sender.value)
          DispatchQueue.main.async {
              self.kmsLabel.text = "\(value)"
              print("Slider value = \(value)")
          }
      }
      

      【讨论】:

        【解决方案5】:

        这就是我所做的,它似乎奏效了:

        // For the slider
        @IBOutlet weak var slider: UISlider!
        
        // For the label displaying the slider value
        @IBOutlet weak var sliderVal: UILabel!
        
        // For the "submit" button action
        @IBAction func newSliderValue(_ sender: Any) {
            sliderVal.text = String(slider.value)
        }
        

        注意,我使用了一个按钮来提交我的新滑块值,而不是你所做的。

        【讨论】:

          【解决方案6】:

          这是我在最新的 Xcode 12.5 和 IOS 14 上使用的:

          @IBAction func sliderValue(_ sender: Any) {
              label.text = "\(slider.value)"
          }
          

          在上面的代码中,我们只是获取滑块的值并将其添加到字符串中。

          然后我们将该字符串指定为标签的文本。

          【讨论】:

            【解决方案7】:

            对于任何试图打印滑块所在值的人:

            @IBAction func sliderValueChanged(_ sender: UISlider) {
                        print(sender.value)
                    }
            

            【讨论】:

              【解决方案8】:

              如果您想以编程方式进行,这是一种方法。

              var slider: UISlider()
              var label: UILabel()
              
              func numberValueChanged(sender: UISlider) {
                  slider.setValue(Float(Int(slider.value)), animated: true)
                  updateLabels(slider.value)
              }
              fun updateLabels(nV: Float?) {
                  if let v = nV {
                      self.label.text = "\(v)"
                  }
              }
              
              slider.addTarget (self,
                               action: #selector(numberValueChanged)
                               forControlEvents: UIControlEvents.ValueChanged
              )
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-03-26
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多