【问题标题】:PickerView with decimal pointPickerView 带小数点
【发布时间】:2018-03-08 03:44:57
【问题描述】:

我使用具有四个组件的 UIPickerView 来输入数字而无需键盘。我添加了一个小数点,只有一个“。”在 UILabelView 中。查看屏幕以了解想法。

我的 UIPickerView 代码是:

func numberOfComponents(in weightPickerView: UIPickerView) -> Int {
    return 4
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return loopingMargin * numbers.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
  return numbers[row % numbers.count]
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    let currentIndex = row % numbers.count
    digits[component] = currentIndex
    let weightString = "\(digits[0])\(digits[1]).\(digits[2])\(digits[3])"
    weightField.text = weightString
}

在 viewDidLoad() 里面的部分代码是:

override func viewDidLoad() {
    super.viewDidLoad()        
    // Do any additional setup after loading the view.

    weightPickerView.dataSource = self
    weightPickerView.delegate = self
    weightPickerView.selectRow((loopingMargin / 2) * numbers.count, inComponent: 0, animated: false)
    weightPickerView.selectRow((loopingMargin / 2) * numbers.count, inComponent: 1, animated: false)
    weightPickerView.selectRow((loopingMargin / 2) * numbers.count, inComponent: 2, animated: false)
    weightPickerView.selectRow((loopingMargin / 2) * numbers.count, inComponent: 3, animated: false)

}

我的问题...我想添加第五个组件,只有一个“。”在其中(因此空间分布均匀)。我该怎么做?

【问题讨论】:

  • 您已经知道如何添加 4 个组件。添加第 5 个有什么问题?
  • 添加一个 '.'在里面...

标签: swift uipickerview


【解决方案1】:

您只需要更新您的选择器视图方法以提供额外的组件。假设你想要它在中间,你的代码需要是:

func numberOfComponents(in weightPickerView: UIPickerView) -> Int {
    return 5
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return component == 2 ? 1 : loopingMargin * numbers.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
  return component == 2 ? "." : numbers[row % numbers.count]
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if component != 2 {
        var index = component
        if component > 2 {
            index -= 1
        }
        let currentIndex = row % numbers.count
        digits[index] = currentIndex
        let weightString = "\(digits[0])\(digits[1]).\(digits[2])\(digits[3])"
        weightField.text = weightString
    }
}

override func viewDidLoad() {
    super.viewDidLoad()        

    weightPickerView.dataSource = self
    weightPickerView.delegate = self
    weightPickerView.selectRow((loopingMargin / 2) * numbers.count, inComponent: 0, animated: false)
    weightPickerView.selectRow((loopingMargin / 2) * numbers.count, inComponent: 1, animated: false)
    weightPickerView.selectRow((loopingMargin / 2) * numbers.count, inComponent: 3, animated: false)
    weightPickerView.selectRow((loopingMargin / 2) * numbers.count, inComponent: 4, animated: false)
}

假设. 代表小数分隔符,请记住,世界各地的许多用户不使用. 作为小数分隔符。所以你真的应该表现出适当的性格。您可以获得NumberFormatterdecimalSeparator 属性。

【讨论】:

    【解决方案2】:

    你可以试试

    func numberOfComponents(in weightPickerView: UIPickerView) -> Int {
        return 5
    }
    
    
     func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
       if(component == 2)
       {
          return "."
       }
       else
       {
           return numbers[row % numbers.count]
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      相关资源
      最近更新 更多