2017-08-19 1 views
0

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

+0

Combien d'éléments voulez-vous avoir pour chaque composant? 9? Chaque fruit une seule fois? –

+0

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

+0

@ AndréSlotta Je n'ai de fruits qu'une seule fois dans chaque composant (component1, component2, component3) – bastosCoder

Répondre

0

Changez votre numberOfRowsInComponent méthode DataSource à ce qui suit:

// returns the # of rows in each component.. 
@available(iOS 2.0, *) 
public func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ 
    switch component { 
    case 0: return component1.count 
    case 1: return component2.count 
    case 2: return component3.count 
    default: return 0 
    } 
} 

Vous devez également ajouter une déclaration break après votre ligne estAutoWin = true puisque vous ne pas avoir à continuer à boucler lorsque vous avez trouvé un fruit correspondant.

estAutoWin = true 
break 
+0

ça marche très bien, merci – bastosCoder