【问题标题】:What is the convention to handle secondary action of UIButton in iOS在 iOS 中处理 UIButton 的辅助操作的约定是什么
【发布时间】:2017-05-05 07:04:15
【问题描述】:

我有一个UIButton,用于在用户触摸按钮时执行某些操作。我在Touch Up Inside 中做到了。我必须实现另一个功能,该功能被视为UIButton 的辅助操作。

iOS 中为同一 UIButton 处理多个操作的约定是什么?我应该使用

双击动作

长按手势

还是别的什么?

【问题讨论】:

  • 还有第三个动作吗?
  • 不,只有两个来自同一个 UIButton 的操作
  • 所以您可以使用按钮的选定状态,当用户第一次单击按钮时 - 将其设置为选中,然后再次单击按钮时检查按钮是否被选中 - 如果是 - 这是第二个动作,否则它是第一个.
  • 它是一个开关,所以这里使用了 On/Off。我需要在那里实现通道分配。
  • 在我打开时最好实现长按向用户提供操作信息。

标签: ios objective-c uibutton conventions ibaction


【解决方案1】:

设置按钮内部方法的标签,设置默认标签为0,

- (IBAction)action:(id)sender {
    UIButton *mybtn = (UIButton*)sender;
    if (mybtn.tag == 0) {
        //perform fist action
        //set btn tag to 1
        mybtn.tag = 1;
    }
    else if (mybtn.tag == 1)
    {
        //perform second action
        //set btn tag to 0
        mybtn.tag = 0;
    }

【讨论】:

    【解决方案2】:

    为了维护应用程序,我不建议在按钮上实现 2 个 IBaction。 我建议创建一个 IBAction 例程来启动这两个操作。

    【讨论】:

      【解决方案3】:

      按照 Imad 的建议,使用名为 isClickedOnce 的布尔值(默认为 false),当用户第一次单击时,将值设置为 true。

      var isClickedOnce = false
      
      func switchAction(){
          if isClickedOnce{
            print("Second")
          }else{
            isClickedOnce = true
            print("First")
          }
      }
      

      【讨论】:

      • 那你想达到什么目的?
      • 我需要分配频道。问题是处理次要动作!而不是如何从同一个动作中完成不同的任务。
      • 您的意思是连续两次点击单个会话吗?
      • 我有一个 UIButton,它是一个开关,所以实现了 ON/Off。我需要在同一个 UIButton 上实现分配通道,以便用户可以选择要控制的通道。我用长按手势做到了。是公约吗?我的英语很差!你能建议对这个问题进行任何修改吗?
      • 在同一个按钮上分配频道是什么意思?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多