UIButton的方法setTitle没有(总是)为我的按钮设置标题

时间:2016-03-09 09:03:04

标签: ios swift function uibutton

我试图编写一个简单的记忆游戏(用动物的名字)来练习Swift。 我真的成功地做到了,除了一件对我来说很奇怪的事情: 在内存中你选择了两个按钮,它们的内容会显示出来,如果它们是相同的,它们仍会被覆盖,否则它们会以覆盖模式返回。

这就是谜题: 当我选择具有相同动物的两个按钮时,它们确实显示了它们的内容,但是当第二个按钮与第一个按钮不同时,仅显示第一个而第二个不显示。 但是,在其下面的代码turn_button(...)中,被调用以显示内容的函数是相同的。 我即将粘贴所有viewController.swift代码,但这里有3行不起作用(setTitle为按钮或标签):

    pressed_start.setTitle("You Can Play!)", forState:UIControlState.Normal)

    default: //cioè prima casella selezionata
        if animals_alive[sender.tag-1] == 1 && couple_set_index[0] != sender.tag
        { //cioè se non tra i già morti e non è stato premuto in caso 0
            couple_set[1] = animals_index[sender.tag-1] ; couple_set_index[1] = sender.tag
            print(animals_in_table[couple_set_index[1]-1])
            turn_button(couple_set_index[1], withwhat: animals_in_table[couple_set_index[1]-1]) //Non lo esegue! esegue però i due Print prima e dopo!!!

    pressed_start.setTitle("Play Again!)", forState:UIControlState.Normal)

这里是整个代码:

import UIKit

class ViewController: UIViewController {

var animals: [String] = ["Dog", "Cat", "Cow", "Mouse", "Horse", "Chicken", "Sheep", "Pig"]
var animals_index = [Int](count: 16, repeatedValue: 0)
var animals_in_table: [String]=[]
var animals_alive = [Int](count:16, repeatedValue: 1)
var position = 0
var startGame_sent = 0
var couple_set = [0,0] //Qui serve che quando ne ha scelto 1 si possano scegliere solo gli altri e quando ne ha scelti 2 dopo 2 secondi o si azzerino le caselle o si eliminino le due scelte se uguali (e qui l'eliminazione e riapparizione per il gioco dopo non è banale!)
var couple_set_index = [0 , 0]

@IBOutlet weak var assign_animal_to_button_1: UIButton!
@IBOutlet weak var assign_animal_to_button_2: UIButton!
@IBOutlet weak var assign_animal_to_button_3: UIButton!
@IBOutlet weak var assign_animal_to_button_4: UIButton!
@IBOutlet weak var assign_animal_to_button_5: UIButton!
@IBOutlet weak var assign_animal_to_button_6: UIButton!
@IBOutlet weak var assign_animal_to_button_7: UIButton!
@IBOutlet weak var assign_animal_to_button_8: UIButton!
@IBOutlet weak var assign_animal_to_button_9: UIButton!
@IBOutlet weak var assign_animal_to_button_10: UIButton!
@IBOutlet weak var assign_animal_to_button_11: UIButton!
@IBOutlet weak var assign_animal_to_button_12: UIButton!
@IBOutlet weak var assign_animal_to_button_13: UIButton!
@IBOutlet weak var assign_animal_to_button_14: UIButton!
@IBOutlet weak var assign_animal_to_button_15: UIButton!
@IBOutlet weak var assign_animal_to_button_16: UIButton!

func turn_button(which_one: Int, withwhat: String) {
    switch which_one {
    case 1: assign_animal_to_button_1.setTitle(withwhat, forState:UIControlState.Normal)
    case 2: assign_animal_to_button_2.setTitle(withwhat, forState:UIControlState.Normal)
    case 3: assign_animal_to_button_3.setTitle(withwhat, forState:UIControlState.Normal)
    case 4: assign_animal_to_button_4.setTitle(withwhat, forState:UIControlState.Normal)
    case 5: assign_animal_to_button_5.setTitle(withwhat, forState:UIControlState.Normal)
    case 6: assign_animal_to_button_6.setTitle(withwhat, forState:UIControlState.Normal)
    case 7: assign_animal_to_button_7.setTitle(withwhat, forState:UIControlState.Normal)
    case 8: assign_animal_to_button_8.setTitle(withwhat, forState:UIControlState.Normal)
    case 9: assign_animal_to_button_9.setTitle(withwhat, forState:UIControlState.Normal)
    case 10: assign_animal_to_button_10.setTitle(withwhat, forState:UIControlState.Normal)
    case 11: assign_animal_to_button_11.setTitle(withwhat, forState:UIControlState.Normal)
    case 12: assign_animal_to_button_12.setTitle(withwhat, forState:UIControlState.Normal)
    case 13: assign_animal_to_button_13.setTitle(withwhat, forState:UIControlState.Normal)
    case 14: assign_animal_to_button_14.setTitle(withwhat, forState:UIControlState.Normal)
    case 15: assign_animal_to_button_15.setTitle(withwhat, forState:UIControlState.Normal)
    case 16: assign_animal_to_button_16.setTitle(withwhat, forState:UIControlState.Normal)
    default: break
    }
}

@IBOutlet weak var pressed_start: UIButton!

@IBAction func startGame(sender: UIButton) {
    startGame_sent = 1 // non esegue le due istruzioni sotto, perchè col tasto 1 va invece? per adesso imposto = 1 all'inizio
    pressed_start.setTitle("You Can Play!)", forState:UIControlState.Normal)


    var animals_ints = [1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8] //Indici degli animali da distribuire
    let start_button_random = Int(arc4random_uniform(15)) ; print("start_button_random: \(start_button_random)")
    position = start_button_random + 1 // così va da 1 a 16
    repeat {
        if animals_alive[position-1] == 1 {
            animals_index[position-1] = animals_ints.removeLast()
            animals_alive[position-1] = 0
        }
        let step = Int(arc4random_uniform(UInt32(animals_ints.count)+1))
        print("Step: \(step)")
        if position + step < 17 {position = position + step} else {position = position + step - 16}
        print("Animals_index: \(animals_index)")
        print("Animals_alive: \(animals_alive)")
        print("position: \(position)")
    } while animals_alive.contains(1) == true
    animals_alive = [Int](count:16, repeatedValue: 1)

    animals_in_table = [] //Azzerare per il secondo gioco
    for index_table in 0...15 {
    animals_in_table.append(animals[animals_index[index_table]-1])
    print(animals_in_table)
    }
startGame_sent = 1 // Prima di ricominciare, ma perchè c'è anche sopra???
}

@IBAction func pressed_button(sender: UIButton) {  // Va in crash se clicco su Bottone prima di Start...
    if startGame_sent == 1 {
    let stato_del_gioco = couple_set[0] + couple_set[1]
    switch stato_del_gioco
    {case 0: //Nessuna casella selezionata --> Problema se scegli per primo casella 1 perchè lui la vede come 0 e dopo nn va avanti al Caso 1
        if animals_alive[sender.tag-1] == 1 { //cioè se non tra i già morti
            couple_set[0] = animals_index[sender.tag-1] ; couple_set_index[0] = sender.tag
            turn_button(couple_set_index[0], withwhat: animals_in_table[couple_set_index[0]-1])
            print("Caso 0 - Casella \(sender.tag) - Animale \(animals_in_table[sender.tag-1) - Coppia scelta: \(couple_set) e Coppia Scelta Index: \(couple_set_index)")
        }
    default: //cioè prima casella selezionata
        if animals_alive[sender.tag-1] == 1 && couple_set_index[0] != sender.tag
        { //cioè se non tra i già morti e non è stato premuto in caso 0
            couple_set[1] = animals_index[sender.tag-1] ; couple_set_index[1] = sender.tag
            print(animals_in_table[couple_set_index[1]-1])
            turn_button(couple_set_index[1], withwhat: animals_in_table[couple_set_index[1]-1]) //Non lo esegue! esegue però i due Print prima e dopo!!!
            print("Caso 1 - Casella \(String(couple_set_index[1])) - Animale \(animals_in_table[couple_set_index[1]-1) - Coppia scelta: \(couple_set) e Coppia Scelta Index: \(couple_set_index)")
        }
    }
    if couple_set_index[1] > 0 {turn_button(couple_set_index[1], withwhat: animals_in_table[couple_set_index[1]-1])} //Non so perchè ma pare lo esegua solo al giro dopo...
    if couple_set_index[1] > 0 {//Ovvero solo se anche la seconda casella è selezionata
        if couple_set[0] == couple_set[1] { //Ci hai preso! Animali uguali diventano "dead" in animals_alive
            print("Sono uguali: Coppia Scelta = \(couple_set) - Etichetta sul pulsante premuto = \(sender.tag)")
            animals_alive[couple_set_index[0]-1]=0 ; animals_alive[couple_set_index[1]-1]=0
        }
        else { //Sono diversi, la funzione initialize_buttons li ricoprirà lasciandoli vivi adesso in "animals_alive"
            print("Sono diversi: Coppia Scelta = \(couple_set) e Coppia Scelta Index: \(couple_set_index) - Etichetta sul pulsante premuto = \(String(couple_set_index[1]))")
        }
        }
    if couple_set_index[1] > 0
    { //Ovvero solo se anche la seconda casella è selezionata
        turn_button(couple_set_index[1], withwhat: animals_in_table[couple_set_index[1]-1]) // Non va neanche qui!!!
        initialize_buttons(animals_alive)
    }
    }
    for index in 0...15 {
        if  couple_set_index[1]-1 == index {turn_button(index+1, withwhat: animals_in_table[index])} // Provo qui a scoprire gli animali del caso 1! non va!!!!!!!
    }
}

func initialize_buttons(animals_alive_arg: Array<Int>) {
    print(animals_alive)
//    sleep(1)
    for index in 0...15 {
        if animals_alive_arg[index] == 1 {turn_button(index+1, withwhat: String(index+1))}
    }
    couple_set = [0,0]; couple_set_index = [0,0]
    if animals_alive_arg.contains(1) == false {
        pressed_start.setTitle("Play Again!)", forState:UIControlState.Normal)
        startGame_sent = 0
        animals_alive = [Int](count:16, repeatedValue: 1)
        initialize_buttons(animals_alive)
    }
}
}

0 个答案:

没有答案