J'écris une application iOS avec swift 3 et Xcode 8.3.3. Mon application est une machine à sous. Dans ma fonction autoWinBtn, quand je veux sélectionner une ligne spécifique (avec selectRow (_ ligne: Int, composant inComponent: Int, animé: Bool)) il ne fonctionne pas ...PickerVIew.selectRow ne fonctionne pas
Voici le résultat de «print»
component1 : [0, 3, 5, 0, 7, 3, 8, 8, 6, 5, 2]
component2 : [6, 3, 1, 8, 5, 7, 3, 1, 7, 7, 0]
component3 : [6, 5, 6, 2, 5, 7, 0, 5, 7, 7, 8]
i : 0 -- 3/10/6 // there are 0 in position 3 for component1
// 10 for component2
// 6 for component3
pos pickerView 1 : 3
pos pickerView 2 : 1
pos pickerView 3 : 6
le pickerView 2 doit être en position 10
est ici tout mon code:
import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
@IBOutlet weak var lasVegasCasinoLabel: UILabel!
@IBOutlet weak var casinoRouletttePickerView: UIPickerView!
@IBOutlet weak var winLoseLabel: UILabel!
@IBOutlet weak var moneyLabel: UILabel!
var collectionFruit: [String] = [String]()
var collectionMoney: [Int] = [Int]()
var component1: [Int] = [Int]()
var component2: [Int] = [Int]()
var component3: [Int] = [Int]()
var money: Int = 0
@IBAction func autoWinBtn(_ sender: UIButton) {
var estAutoWin: Bool = false
print("component1 : \(component1)")
print("component2 : \(component2)")
print("component3 : \(component3)")
for i in 0...collectionFruit.count-1 {
let fruit1 = isPresent(component: component1, number: i)
let fruit2 = isPresent(component: component2, number: i)
let fruit3 = isPresent(component: component3, number: i)
if (fruit1 != -1 && fruit2 != -1 && fruit3 != -1 && estAutoWin == false){
print("i : \(i) -- \(fruit1)/\(fruit2)/\(fruit3)")
casinoRouletttePickerView.selectRow(fruit1, inComponent: 0, animated: true)
casinoRouletttePickerView.selectRow(fruit2, inComponent: 1, animated: true)
casinoRouletttePickerView.selectRow(fruit3, inComponent: 2, animated: true)
print("pos pickerView 1 : \(casinoRouletttePickerView.selectedRow(inComponent: 0))")
print("pos pickerView 2 : \(casinoRouletttePickerView.selectedRow(inComponent: 1))")
print("pos pickerView 3 : \(casinoRouletttePickerView.selectedRow(inComponent: 2))")
estAutoWin = true
}
}
winLose()
}
func isPresent(component: [Int], number: Int) -> Int {
var present: Int = -1
for i in 0...component.count-1 {
if component[i] == number {
present = i
}
}
return present
}
@IBAction func playButtonAction(_ sender: UIButton) {
money -= 10
casinoRouletttePickerView.selectRow(randomNumber(num: collectionFruit.count-1), inComponent: 0, animated: true)
casinoRouletttePickerView.selectRow(randomNumber(num: collectionFruit.count-1), inComponent: 1, animated: true)
casinoRouletttePickerView.selectRow(randomNumber(num: collectionFruit.count-1), inComponent: 2, animated: true)
winLose()
}
func winLose(){
if (component1[casinoRouletttePickerView.selectedRow(inComponent: 0)] ==
component2[casinoRouletttePickerView.selectedRow(inComponent: 1)] &&
component1[casinoRouletttePickerView.selectedRow(inComponent: 0)] ==
component3[casinoRouletttePickerView.selectedRow(inComponent: 2)]){
winLoseLabel.text = "Gagner"
winLoseLabel.textColor = UIColor.green
money += 20
moneyLabel.text = "\(money)"
} else {
winLoseLabel.text = "Perdu"
winLoseLabel.textColor = UIColor.red
moneyLabel.text = "\(money)"
}
}
func randomNumber(num: Int) -> Int{
return Int(arc4random_uniform(UInt32(num)))
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
money = 100
collectionFruit = ["", "", "", "", "", "", "", "", ""]
collectionMoney = [1, 3, 5, 10, 20, 50, 100, 200, 500]
for _ in 0...10 {
component1.append(randomNumber(num: collectionFruit.count))
component2.append(randomNumber(num: collectionFruit.count))
component3.append(randomNumber(num: collectionFruit.count))
}
lasVegasCasinoLabel.text = "Las Vegas \n Casino"
casinoRouletttePickerView.delegate = self
casinoRouletttePickerView.dataSource = self
}
// returns the number of 'columns' to display.
@available(iOS 2.0, *)
public func numberOfComponents(in pickerView: UIPickerView) -> Int{
return 3
}
// returns the # of rows in each component..
@available(iOS 2.0, *)
public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return collectionFruit.count
}
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 100
}
func pickerView(_ pickerView: UIPickerView, widthForComponent component: Int) -> CGFloat {
return 100
}
@available(iOS 2.0, *)
public func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let pickerLabel: UILabel = UILabel()
switch component {
case 0:
pickerLabel.text = collectionFruit[component1[row]]
case 1:
pickerLabel.text = collectionFruit[component2[row]]
case 2:
pickerLabel.text = collectionFruit[component3[row]]
default:
print("Erreur de component")
}
pickerLabel.font = UIFont(name: "Apple Color emoji", size: 100)
pickerLabel.textAlignment = NSTextAlignment.center
return pickerLabel
}
}
Je l'ai fait beaucoup de recherches, mais aucun des résultats ont travaillé avec moi
Combien d'éléments voulez-vous avoir pour chaque composant? 9? Chaque fruit une seule fois? –
Je veux le même résultat dans chaque composant donc dans un premier temps je regarde s'il y a le même nombre dans component1, component2, component3 (fonction isPresent) et j'envoie le résultat (index du nombre) dans fruit1, fruit2, fruit3. Donc le pickerView2 devrait être en position 10 car en position 10 il y a 0 et dans pickerView1 et pickerView3 ont aussi 0 (en position 3 et 6) – bastosCoder
@ AndréSlotta Je n'ai de fruits qu'une seule fois dans chaque composant (component1, component2, component3) – bastosCoder