从没有参数的另一种方法调用IBAction

时间:2014-12-09 13:01:57

标签: ios swift ibaction

在我的程序中,2个函数(IBAction player.Move(UIButton)autoMove())应该轮流调用,直到所有字段(UIButtons)都被点击为止。为此,我创建了一个函数play()。但是,我不知道如何将IBAction playerMove置于play()函数内,因为我这里不需要参数。
我找到了一些答案并尝试self.playerMove(nil)self.playerMove(self),但它不起作用。

import UIKit

class ViewController: UIViewController {

@IBOutlet var cardsArray: Array<UIButton> = [] 

var randomCard = 0


override func viewDidLoad() {
    super.viewDidLoad()
    self.play()
    // Do any additional setup after loading the view, typically from a nib.
}


func play () {
    self.autoMove()
    self.playerMove(self) // <----- here is my problem

}



@IBAction func playerMove(sender: UIButton) {

    switch (sender) {

    case self.cardsArray[0]:
        self.cardPressedAll(0)

    case self.cardsArray[1]:
        self.cardPressedAll(1)

    case self.cardsArray[2]:
        self.cardPressedAll(2)

    case self.cardsArray[3]:
        self.cardPressedAll(3)

    default: break
    }

}


func cardPressedAll (cardNumber: Int) {

    self.cardsArray[cardNumber].enabled = false

    self.cardsArray[cardNumber].setBackgroundImage(UIImage(named: "cross"), forState: UIControlState.Normal)

    self.cardsArray.removeAtIndex(cardNumber)

}


  func autoMove (){

    self.randomCard  = Int(arc4random_uniform(UInt32(self.cardsArray.count)))

    self.cardsArray[self.randomCard].enabled = false

    self.cardsArray[self.randomCard].setBackgroundImage(UIImage(named: "nought"), forState: UIControlState.Normal)

    self.cardsArray.removeAtIndex(self.randomCard)
}

}

2 个答案:

答案 0 :(得分:8)

您必须在没有按钮的情况下调用playerMove:,在这种情况下,您必须将sender参数声明为可选参数。像:

@IBAction func playerMove(sender: UIButton?) {

UIButton表示您必须传递一个按钮。 nil不是按钮,但使用UIButton?,也就是Optional<UIButton>nil是一个有效值,表示没有按钮。

您必须确定要传递给playerMove:的按钮,以使其按照您的意愿行事。坐下来找出你想要发生的事情,以及代码需要做些什么来实现这一目标。

答案 1 :(得分:0)

在Swift 5.0及更高版本中的doSomeTask(UIButton())对我有用