Saya membuat permainan kartu tebakan murni di mana setiap kali kartu yang tepat dipilih, tombol/kartu baru akan muncul di layar. Saya telah membuat fungsi addButton tetapi saya bingung harus memasukkan apa ke dalamnya. Adakah yang bisa membimbing saya ke arah yang benar tentang bagaimana saya harus membuat tombol baru setiap kali fungsi dipanggil.

let card1 = UIButton(type: UIButtonType.Custom) as UIButton
let card2 = UIButton(type: UIButtonType.Custom) as UIButton
var random = arc4random_uniform(101)
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    card1.backgroundColor = UIColor.cyanColor()
    card1.frame = CGRectMake(100, 100, 100, 100)
    card1.addTarget(self, action: "Card1Btn:", forControlEvents: UIControlEvents.TouchUpInside)
    self.view.addSubview(card1)

    card2.backgroundColor = UIColor.cyanColor()
    card2.frame = CGRectMake(500, 100, 100, 100)
    card2.addTarget(self, action: "Card2Btn:", forControlEvents: UIControlEvents.TouchUpInside)
    self.view.addSubview(card2)

}

func Card1Btn(sender: UIButton!){
    if random <= 50{
        print("you won")

    }else{
        print ("you Lost")

    }

}

func Card2Btn(sender: UIButton!){
    if random >= 51{
        print("you won")
    }else{
        print("you lost")
    }

}

func addButton(){

}
-1
user6794148 4 September 2016, 23:26

1 menjawab

Jawaban Terbaik

Anda sudah memiliki kode untuk menambahkan tombol di viewDidLoad, jadi mari kita buat agar dapat digunakan kembali. Pertama kita perlu membuat variabel referensi card1 dan card2 Anda, sehingga kami dapat melacak kartu baru yang akan kami buat...

var card1 = nil as UIButton?
var card2 = nil as UIButton?

Juga, karena kode untuk menambahkan tombol akan dapat digunakan kembali, kami tidak ingin mengulanginya sendiri, jadi mari tambahkan beberapa konstanta untuk bingkai kartu 1 dan kartu 2...

let card1Frame = CGRectMake(100, 100, 100, 100)
let card2Frame = CGRectMake(500, 100, 100, 100)

Dan kita dapat memasukkan kode tombol tambahan (yang sebelumnya diulang dalam viewDidLoad) ke dalam fungsinya sendiri...

func addButtonWithFrame(frame: CGRect) -> UIButton
{
    let card = UIButton(type: UIButtonType.Custom) as UIButton
    card.backgroundColor = UIColor.cyanColor()
    card.frame = frame
    card.addTarget(self, action: #selector(MyVC.cardButtonPressed(_:)), forControlEvents: UIControlEvents.TouchUpInside)
    self.view.addSubview(card)
    return card
}

Sekarang kita memiliki cara umum untuk membuat dan menambahkan tombol, mari kita gunakan di viewDidLoad...

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    card1 = self.addButtonWithFrame(card1Frame)
    card2 = self.addButtonWithFrame(card2Frame)
}

Dan sekarang kita dapat menggunakan kembali kode yang sama ketika tombol ditekan...

func cardButtonPressed(sender: UIButton!){
    // Decide on win or lose based on current value of 'random'
    if random <= 50{
        print("you won")
    }else{
        print("you Lost")
    }
    // Set a new value for 'random' ready for next time
    random = arc4random_uniform(101)
    // Remove old card
    sender.removeFromSuperview()
    // Generate new replacement card
    let newFrame = sender.frame
    let newCard = self.addButtonWithFrame(newFrame)
    // Keep reference to new card
    if (sender == card1){
        card1 = newCard
    }else{
        card2 = newCard
    }
}
1
jhabbott 5 September 2016, 00:19
Ini bagus jika saya ingin mengganti kartu tetapi saya ingin menambahkan lebih banyak kartu. Jadi awalnya ada 2 kartu, maka misalkan user menjawab dengan benar harusnya ada 3 kartu.
 – 
user6794148
5 September 2016, 03:06
Seharusnya mudah untuk dimodifikasi. Jawaban saya menunjukkan bagaimana Anda sudah menambahkan kartu secara terprogram, hanya perlu sedikit penataan ulang untuk membuat kode dapat digunakan kembali. Jika Anda ingin menambahkan banyak kartu, Anda dapat melacaknya dalam larik (atau jika itu adalah satu-satunya sub-tampilan dari tampilan Anda, maka view.subviews sudah melacaknya untuk Anda). Kesimpulan utama adalah Anda harus menggunakan fungsi generik untuk menangani penekanan kartu dan membuatnya berperilaku berbeda (jika diperlukan) berdasarkan kartu itu sendiri (sender). Anda dapat menggunakan properti card.tag jika Anda ingin memberi masing-masing identitas unik.
 – 
jhabbott
5 September 2016, 04:07