2017-09-12 3 views
0

J'ai 3 colonnes sur mon pickerView et son représentant un nombre à 3 chiffres. Y at-il une fonction que je peux ajouter à un UIButton qui fait tourner la roue? Par exemple, quand il affiche «119», en appuyant sur UIButton, il devrait passer à «120». Voici ce que j'ai jusqu'à présent:Ajouter un bouton à UIPickerView pour aller au numéro suivant

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 

@IBOutlet weak var label: UILabel! 
@IBOutlet weak var pickerView: UIPickerView! 

let numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] 

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 3 
} 

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

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

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    let val1 = numbers[pickerView.selectedRow(inComponent: 0)] 
    let val2 = numbers[pickerView.selectedRow(inComponent: 1)] 
    let val3 = numbers[pickerView.selectedRow(inComponent: 2)] 

    label.text = "\(val1) \(val2) \(val3)" 
} 

Répondre

1

Voici votre code, simplifié. buttonPressed fera pickerView aller au numéro suivant. Quand il atteint 999, il revient à 000.

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 
    @IBOutlet weak var label: UILabel! 
    @IBOutlet weak var pickerView: UIPickerView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     changeLabelText() 
    } 

    func numberOfComponents(in pickerView: UIPickerView) -> Int { 
     return 3 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     return "\(row)" 
    } 

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return 10 
    } 

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     changeLabelText() 
    } 

    fileprivate func num(_ i: Int) -> Int { 
     return pickerView.selectedRow(inComponent: i) 
    } 

    @IBAction func buttonPressed() { 
     let currentNum = num(0) * 100 + num(1) * 10 + num(2) 
     let nextNum = currentNum + 1 

     pickerView.selectRow(nextNum % 1000/100, inComponent: 0, animated: true) 
     pickerView.selectRow(nextNum % 100/10, inComponent: 1, animated: true) 
     pickerView.selectRow(nextNum % 10, inComponent: 2, animated: true) 

     changeLabelText() 
    } 

    fileprivate func changeLabelText() { 
     label.text = "\(num(0)) \(num(1)) \(num(2))" 
    } 
} 
1

Bien sûr, utiliser la méthode selectRow, qui sélectionnera une ligne de la colonne spécifique (alias composant). La méthode a également la possibilité d'animer ce changement. Ajouter un bouton pour le story-board et le connecter à une méthode telle que:

@IBAction func go120(_ sender: Any) { 
    pickerView.selectRow(1, inComponent: 0, animated: true) 
    pickerView.selectRow(2, inComponent: 1, animated: true) 
    pickerView.selectRow(0, inComponent: 2, animated: true) 
}