UIButton按住

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIButton按住相关的知识,希望对你有一定的参考价值。

我想实现一个按住按钮。因此,当您按下按钮时,功能A执行,当您释放时,功能B执行。我找到了这个,但这不是我想要的。

UIButton Touch and Hold

我不想要任何重复动作。

答案

只需根据不同的事件向UIButton添加不同的选择器。要在最初按下时设置选择器,请执行以下操作

[button addTarget:self action:@selector(buttonDown:) forControlEvents:UIControlEventTouchDown];

以及释放按钮时的选择器:

[button addTarget:self action:@selector(buttonUp:) forControlEvents:UIControlEventTouchUpInside];
另一答案

我自己也遇到过这个问题,大多数情况下我们都会使用这些事件: -

// This event works fine and fires
[button addTarget:self action:@selector(holdDown)
             forControlEvents:UIControlEventTouchDown];

// This does not fire at all
[button addTarget:self action:@selector(holdRelease)
             forControlEvents:UIControlEventTouchUpInside];

解:

使用长按手势识别器:

UILongPressGestureRecognizer *btn_LongPress_gesture = [[UILongPressGestureRecognizer alloc] 
        initWithTarget:self action:@selector(handleBtnLongPressGesture:)];
[button addGestureRecognizer:btn_LongPress_gesture];

手势的实现: -

- (void)handleBtnLongPressGesture:(UILongPressGestureRecognizer *)recognizer { 

  //as you hold the button this would fire
  if (recognizer.state == UIGestureRecognizerStateBegan) {   
    [self buttonDown];
  }

  // as you release the button this would fire
  if (recognizer.state == UIGestureRecognizerStateEnded) {
    [self buttonUp];
  }
}
另一答案

你可以实施

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

方法,然后使用CGRectContainsPoint()检查您的按钮是否位于触摸位置

然后,如果用户移动手指

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 

将被称为..在那里你应该再次检查用户是否仍在你的按钮上。否则停止你的功能

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

当用户从屏幕上移开手指时调用

另一答案

我认为最好的解决方案是使用UIGestureRecognizer实现,其中一个是UITapGestureRecognizer,另一个是UILongPressGestureRecognizer。

另一答案

UILongPressGestureRecognizer Swift 3及以上版本:

// Add Gesture Recognizer to view

let longPressGestureRecognizer = UILongPressGestureRecognizer(
            target: self,
            action: #selector(handleLongPress(_:)))

view.addGestureRecognizer(longPressGestureRecognizer!)

以上是关于UIButton按住的主要内容,如果未能解决你的问题,请参考以下文章

UIButton按住

UIButton检测按住,以及“手势识别器”?

如何在按住手指的同时从使用一个 UIButton 切换到另一个?

长按多次调用 UIButton 的动作

UIScrollView 上具有垂直间距的动态 UIButton

UIButton 状态