当按钮没有被按下时,我该如何调用按钮函数?

7

我有一个与按钮连接的IBAction,并且想知道是否有任何方法可以在未按下按钮的情况下运行该函数。这是我尝试过的...

注意:我正在使用Swift进行此项目。

//I get an error when I type this code?
self.buttonPressed()

@IBAction func buttonPressed(sender: AnyObject) {

    print("Called Action")

}

什么错误?是运行时错误还是构建错误? - oren
你需要传递一个“sender”参数。约定俗成的是,方法以小写字母开头,类以大写字母开头。 - zaph
我应该传递什么发送方参数? - nachshon fertel
如果在操作中未使用“sender”,则可以传递任何对象,“self”是常见的。如果使用了“sender”,则必须传递可接受该操作的对象。 - zaph
6个回答

20

使你的发送者参数变为可选,并将nil传递给ButtonPressed。

self.ButtonPressed( nil )


@IBAction func ButtonPressed( sender: AnyObject? ) {
    println("Called Action")
}

10

一种方法是将您的按钮与其对应的界面生成器按钮链接起来,并在调用函数时将其传递到函数中。

@IBOutlet weak var yourButton: UIButton!

self.buttonPressed(yourButton)

@IBAction func buttonPressed(sender: AnyObject) {
    print("Called Action")
}

或者,可以这样定义函数,然后你就能够像以前一样调用你的方法:

@IBAction func buttonPressed(sender: AnyObject? = nil) {
    print("Called Action")
}

// Call your method like this
self.buttonPressed()

// or this
self.buttonPressed(sender: nil)

@satachito 是的,我真的很喜欢 Swift 中的可选参数!代码简洁清晰 :) - Chackle
“= nil” 对我没起作用。顺便问一下,那是做什么的? - NYC Tech Engineer
2
@NYCTechEngineer 如果类型被定义为可选类型(在 AnyObject 后面加上 ?),那么 '= nil' 只能起作用。这基本上意味着,如果方法被调用时没有任何参数,它将默认将 sender 设置为 nil。这有意义吗? - Chackle
@Chackle 那样做更有意义。我试图将nil传递给调用,也许这就是为什么它不起作用的原因。我只需要调用函数而不传递任何参数,它就会自动发送nil,对吗? - NYC Tech Engineer
@NYCTechEngineer 这完全正确! :) 很好,很干净,不是吗? - Chackle
@Chackle,这很棒,迫不及待想试试! - NYC Tech Engineer

2
您的ButtonPressed函数需要一个参数sender,但是在调用它时您没有传递任何参数。然而,如果您是以编程方式进行操作,则显然没有sender
解决此问题的两种方法:
  • 将sender参数设置为可选项(AnyObject?而不是AnyObject),并调用self.ButtonPress(nil)。我刚刚尝试了一下,它可以工作。
  • 将所有按钮按下功能放在单独的函数中,例如performButtonPress()。从IBAction输出中调用它,如果您想以编程方式按下按钮,则直接调用performButtonPress()

1
使用以下格式调用按钮操作:Swift 3
@IBAction func buttonSelected(_ sender: UIButton) {
        print("Butten clicked")
}

调用按钮操作的方法:
let button = UIButton()
self.buttonSelected(button)

0
    lazy var Button : UIBarButtonItem = {
      let barButtonItem = UIBarButtonItem(title: "Button", style: .done, target: self, action: #selector(btnSelection))
      return barButtonItem
    }()


    func btnSelection(){
     // Code
    }

    // Now you can call self.btnSelection() whenever you want

0
你需要将“self”作为“sender”使用,例如:
self.buttonPressed (sender: self)

或者一个更简单的版本

buttonPressed (sender: self)

两者都在Swift 3中进行了测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接