5

直接问题:

如何在 Swift 2.0 中以编程方式点击 UIButton?

例子:UIButton.tap()

关于为什么我不能直接调用按钮单击功能的解释:

我目前正在使用 AKSwiftSlideMenu ( https://github.com/ashishkakkad8/AKSwiftSlideMenu ) ( https://www.cocoacontrols.com/controls/akswiftslidemenu ) 创建菜单。这是通过将菜单视图控制器作为子视图添加到主视图控制器来实现的。

let menuVC : BackTableViewController = self.storyboard!.instantiateViewControllerWithIdentifier("backTableViewController") as! BackTableViewController
    menuVC.btnMenu = sender

    self.view.addSubview(menuVC.view)
    self.addChildViewController(menuVC)

如您所见,作为btnMenuaUIButton的 正在传递给menuVC。在两个视图控制器上拥有相同的按钮允许主视图控制器中的单个onSlideMenuButtonPressed(sender : UIButton)函数来处理menuVC. 我正在创建的菜单中的一个选项是“注销”按钮,该按钮显示UIAlertViewController询问用户是否要注销。以下是我的“是”按钮处理程序的代码menuVC

        logOutAlert.addAction(UIAlertAction(title:"Yes", style: .Default, handler:  { action in 
        self.btnMenu.touchInside
        CURRENT_USER.unauth()
        NSUserDefaults.standardUserDefaults().setValue(nil, forKey: "uid")
        print("User logged out")
        CurrentUser.checkIfUserIsLoggedIn()
    }))

我正在尝试使用该touchInside方法(当然这是不对的)点击按钮以关闭menuVC. 是否有UIButton.tap()等价物或访问该btnMenu onSlideMenuButtonPressed(sender : UIButton)功能的方法?

旁注: 我尝试了创建一个 homeViewControllerDelegate 对象以直接menuVC调用的想法onSlideMenuButtonPressed(sender : UIButton),这可能有效,但它似乎是一种迂回的方式,因为它btnMenu已经具有对该函数的引用。

4

2 回答 2

21

你有没有尝试过:

myAutomatedButton.sendActionsForControlEvents(.TouchUpInside)

这似乎是以前的问题并且可能重复,但我发现的帖子是:如何以编程方式将触摸事件伪造为 UIButton?

+1 表示 Swift 3/4 以下:@Eneko Alonso

于 2016-04-07T03:03:36.057 回答
2

也可以@IBAction定义为:

@IBAction func myButtonAction(_ sender: UIButton) {
    // do something
}

func otherMethod() {
   self.myButtonAction(UIButton())
}
于 2020-08-03T04:30:36.617 回答