未按下按钮时如何调用按钮功能

Posted

技术标签:

【中文标题】未按下按钮时如何调用按钮功能【英文标题】:How do I call a button function when the button is not being pressed 【发布时间】:2015-05-01 12:19:33 【问题描述】:

我有一个连接到按钮的 IBAction,我想知道即使没有按下按钮,是否有任何方法可以运行该功能。这是我尝试过的......

注意:我在这个项目中使用 swift。

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

@IBAction func buttonPressed(sender: AnyObject) 

    print("Called Action")


【问题讨论】:

什么错误?在运行时或构建错误? 您需要传递一个“发件人”参数。惯例是方法以小写字母开头,类以大写字母开头。 我传递了什么发件人参数? 如果sender 没有在你可以传递任何对象的动作中使用,self 是常见的。如果使用了sender,则必须传递一个动作可接受的对象。 【参考方案1】:

将您的 sender 参数设为可选并将 nil 传递给 ButtonPressed。

self.ButtonPressed( nil )


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

【讨论】:

【参考方案2】:

一种方法是将您的按钮链接到其各自的界面构建器按钮,并在您调用它时将其传递给您的函数。

@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 中的可选参数!漂亮干净的代码:) '= nil' 对我不起作用。顺便说一句,这到底是做什么的? @NYCTechEngineer '= nil' 仅在类型被定义为可选(AnyObject 末尾的 ?)时才有效。这基本上意味着如果在没有任何参数的情况下调用该方法,它将默认将sender 设置为 nil。这有意义吗? @Chackle 这实际上更有意义。我试图将 nil 传递给调用,也许这就是它不起作用的原因。我所要做的就是调用函数而不传递任何参数,它会自动发送nil,对吧? @NYCTechEngineer 完全正确! :) 又好又干净,不是吗?【参考方案3】:

您的ButtonPressed 函数需要一个参数sender,但您在调用它时并没有传递任何参数。但是,如果您以编程方式执行此操作,那么您显然没有sender

解决此问题的两种方法:

将 sender 参数设为可选参数(AnyObject? 而不是 AnyObject)并调用 self.ButtonPress(nil)。我刚试了一下,效果很好。 将所有按钮按下函数放在一个单独的函数中,例如performButtonPress()。从 IBAction 插座内部调用它,如果你想以编程方式按下按钮,直接调用performButtonPress()

【讨论】:

【参考方案4】:

使用以下格式调用按钮操作:Swift 3

@IBAction func buttonSelected(_ sender: UIButton) 
        print("Butten clicked")

调用按钮动作:

let button = UIButton()
self.buttonSelected(button)

【讨论】:

【参考方案5】:

你需要使用“self”作为“sender”,例如:

self.buttonPressed (sender: self)

或更简单的版本

buttonPressed (sender: self)

都在 Swift 3 中测试

【讨论】:

【参考方案6】:
    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

【讨论】:

以上是关于未按下按钮时如何调用按钮功能的主要内容,如果未能解决你的问题,请参考以下文章

为啥 KeyListener 仅在未按下按钮时才起作用?

TouchGFX:如何处理按下/未按下按钮的指令

按下回车按钮时如何使用 C++ Win32 API 调用按钮?

如何使用pressedcls更改extjs4中按钮的背景图像?

在选择器视图上未按下按钮

按下和未按下的 UIButton 图像