如何在swift中捕获按钮事件类型

时间:2015-08-28 21:47:52

标签: swift events ibaction

我无法找到有关如何捕获触摸事件的信息。 Event.type和event.description对我没有帮助,据我所知,文档中没有示例。

我正在几个按钮上创建一个IBAction,并希望(共享)动作处理命名按钮(sender.currentTitle)和(事件。??),以添加按钮被点击或长按的代码。 / p>

 @IBAction func ChangeSort(sender: UIButton, forEvent event: UIEvent!)     {
            //  Trying to capture the button action? Type?? Description?


 switch event.type   {
           case "Touch Up Inside":  
            //  Switching on currenttitle works fine.
            switch sender.currentTitle! {
            case "Amount":
                MyQueries.QppQueryOrderBy = "Order by Amount"
                //  Mylabel.text = "sss"
            default: ...
            }
        case "Touch Down Repeat":
            print("In long press")
            switch sender.currentTitle! {
            case "Amount":
                MyQueries.QppQueryOrderBy = "Order by Amount desc"
            default: ...
            }
        default:
            print("in def")
            switch sender.currentTitle! {
            case "Amount":...
                MyQueries.QppQueryOrderBy = "Order by LastActivityDate desc"
            default:
                MyQueries.QppQueryOrderBy = "Order by Amount desc"
            }

        }
        self.theTableView.reloadData()
}

1 个答案:

答案 0 :(得分:1)

你回来的UIEvent不会告诉你你想要什么。 UIEvent只会告诉您触摸,动作或遥控器。您正在寻找UIControlEvent,这很难从iBAction中获取。解决此问题的更标准方法是制作多个@IBAction func并将不同类型的控制事件分配给不同类型。

因此,对于所有命名按钮,您可以将内部事件中的修饰分配给相同的sortByTitle函数。

 @IBAction func sortByTitle(sender: UIButton)    {
        //  This is associated with TouchUpInside in IB
        switch sender.currentTitle! {
        case "Amount":
            MyQueries.QppQueryOrderBy = "Order by Amount"
            //  Mylabel.text = "sss"
        default: ...
        }
    self.theTableView.reloadData()

    }

    @IBAction func sortByTitleDescending(sender: UIButton)    {
        //This is associated with Touch Down Repeat
        print("In long press")
        switch sender.currentTitle! {
        case "Amount":
            MyQueries.QppQueryOrderBy = "Order by Amount desc"
        default: ...
        }
              self.theTableView.reloadData()
      }

基本上,如果您要在代码中创建按钮,则在初始化时,您可以使用UIControl / UIButton上的addTarget方法为要监视的每个控件事件添加一个func。在addTarget中,为每个func指定不同的func。在IB中,您只是以图形形式执行此操作。