【问题标题】:Create action after multiple clicks on UIButton [closed]多次单击 UIButton 后创建操作 [关闭]
【发布时间】:2013-08-08 19:27:25
【问题描述】:

我想在用户多次单击同一个按钮后创建一个动作。我不知道如何实现这一点,我还没有找到任何可以帮助我的东西。

【问题讨论】:

  • 给我们一点上下文。您是否已经设法将按钮连接到 Interface Builder 中的操作方法?
  • 你的意思是例如双击?或者计算该按钮的点击次数。
  • 我的故事板中有一个按钮,我想在多次单击该按钮后创建一个动作。
  • 假设我想在用户点击按钮@Tarek 10 次后创建一个操作
  • 那你需要写一些代码。

标签: ios uibutton


【解决方案1】:

在实现文件的顶部创建一个计数变量

@interface yourViewController (){
    int buttonCount;
}

在某处初始化(例如viewDidLoad

buttonCount = 0;

在您的 IBAction 中(假设您已将 UIButton 链接到 IBAction)

- (IBAction)yourButton:(id)sender{

   buttonCount++;

   if (buttonCount >= 10){ // button clicked 10 or more times

      //do something

      buttonCount = 0;//if you need to reset after action
   }

}

【讨论】:

  • 我的应用在执行此代码后崩溃
  • 好的,崩溃日志中的内容
  • 发送到实例的无法识别的选择器
  • 我还添加了点击 10 次后的操作。
  • 我解决了这个问题,我让它工作了。感谢您的帮助!
【解决方案2】:

您可以通过多种方式实现这一点。

一种方法是“制作您自己的按钮”并将 UIButton 子类化并尝试覆盖手势识别器。这可能会很老套和不干净。

另一种“制作自己的按钮”的方法是制作一个 UIView,它的 TapGestureRecognizer 将 numberOfTapsRequired 设置为您想要的点击次数。

我认为(可能)为您的目的最好的方法是在您的私有@interface 中有一个全局变量,您将其放在实现文件的顶部(就像这样),然后每次点击按钮时递增它,然后在动作发生时重置它。

 @interface YourViewController (){
      NSInteger buttonTaps;
 }

 @end

 @implementation YourViewController
 -(IBAction)buttonTap:(id)sender
 {
    if (buttonTaps < numberYouWant) 
       buttonTaps++;
    else
       [self theNameOfTheMethodThatImplementsTheThingsYouWantToOccur]
 }


 -(void) theNameOfTheMethodThatImplementsTheThingsYouWantToOccur
  {
    // perform your action
    buttonTaps = 0; // reset counter
  }

 @end

希望这会有所帮助!

编辑

我只想指出,我可能会将 UIView 子类化,因为它是实现这一点的最简洁方式和最个性化的方式,而且我认为一旦你获得了你想要工作的功能,这对你来说将是一个很好的编程挑战。

【讨论】:

    【解决方案3】:

    UITapGestureRecognizer 怎么样?

    - (void)handleTap:(UITapGestureRecognizer *)sender {     
        if (sender.state == UIGestureRecognizerStateEnded){
        //handle code here
      } 
    }
    

    这将为您处理多次点击。这里有Apple docs 供您了解。

    如果你谷歌方法名+tutorial,你可能会找到一堆。

    【讨论】:

      【解决方案4】:

      在视图控制器类中声明一个实例变量“count”。使用 XIB 或在控制器中使用 addTarget:action: forControlEvents: 将按钮连接到操作方法。每次用户单击按钮时都会调用该方法。每次将计数增加 1。检查 if(count == 10) 或任何数字,在这种情况下,调用任何方法或执行任何你想要的代码。

      【讨论】:

        【解决方案5】:

        viewDidLoad:

        UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(yourTapHandler:)];
        [self.yourButton addGestureRecognizer:gestureRecognizer];
        gestureRecognizer.numberOfTapsRequired = 10;
        

        然后在yourTapHandler:点击后做任何你想做的事情:

        -(void)yourTapHandler:(UITapGestureRecognizer *)recognizer{
            //do stuff
        }
        

        【讨论】:

        • 我的 TapHandler 是什么? @hw731
        • @user2654446 - 这只是你编写的一个方法,当按钮被点击 10 次时会被调用。你可以随意命名。
        • @user2654446 - 抱歉,我认为我的第一个答案不清楚。编辑修复。
        • 没问题感谢帮助。我应该用我的按钮名称替换代码中的“按钮”吗? @hw731
        • 仅供参考@hw731 这仅在水龙头快速连续时才有效。我显然不知道 OP 想要做什么,但如果水龙头分布在更长的时间内,这将不起作用
        猜你喜欢
        • 2012-08-06
        • 1970-01-01
        • 1970-01-01
        • 2012-10-10
        • 1970-01-01
        • 2015-12-08
        • 2014-01-26
        • 2013-08-22
        • 1970-01-01
        相关资源
        最近更新 更多