为UIButton添加长按事件的三种方法

本文介绍了三种为UIButton添加长按事件的方法:1)通过重写UIButton并设置代理;2)直接在UIButton上添加UILongPressGestureRecognizer;3)利用UIControlEvent的TouchDown,TouchUpInside,TouchUpOutside事件。每种方法都有详细的代码实现,覆盖了不同场景的需求。" 131272699,8753399,Java实现M维单纯形晶格点计算,"['java', '开发语言', '算法']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现方法一:重写UIButton, 设置一个代理CustomButtonDelegate

@optional

-(void)buttonTouchedDown:(UIButton*)button;

-(void)buttonTouchedUpOutside:(UIButton*)button;

-(void)buttonTouhedCancelled:(UIButton*)button;

-(void)buttonTouchedLongTime:(UIButton*)button;

@end

 

-(id)init{

  If(self = [super init]){

self.showsTouchWhenHighlighted = YES;

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

[self addTarget:self action:@selector(buttonTouchedUpOutside:) forControlEvents: UIControlEventTouchUpOutside];

 

[self addTarget:self action:@selector(buttonTouhedCancelled:) forControlEvents:UIControlEventTouchCancell];

    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(buttonTouchedLongTime:)];   

 longPress.minimumPressDuration = 0.8; //定义按的时间  

 [self  addGestureRecognizer:longPress];  

}

return self;

}

-(void)buttonTouchedDown:(UIButton *)button

{

  If([self.delegaterespondsToSelector:@selector(buttonTouchedDown:)]){

[self.delegate buttonTouchedDown:self];

}

}

依次类推…

 

 

实现方法二:

1. UIButton *aBtn=[UIButton buttonWithType:UIButtonTypeCustom];  

2.     [aBtn setFrame:CGRectMake(40, 100, 60, 60)];  

3.     [aBtn setBackgroundImage:[UIImage imageNamed:@"111.png"] forState:UIControlStateNormal];  

4. //button点击事件  

5.     [aBtn addTarget:self action:@selector(btnShort:) forControlEvents:UIControlEventTouchUpInside];  

6.     //button长按事件  

7.     UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(btnLong:)];   

8.     longPress.minimumPressDuration = 0.8; //定义按的时间  

9.     [aBtn addGestureRecognizer:longPress];  

10.  

11.  

12.  

13.-(void)btnLong:(UILongPressGestureRecognizer *)gestureRecognizer{  

14.    if ([gestureRecognizer state] == UIGestureRecognizerStateBegan) {  

15.        NSLog(@"长按事件");  

16.        UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"消息" message:@"确定删除该模式吗?" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"", nil];  

17.        [alert show];  

18.    }  

19.

这种方法是设置在固定时间内触发的事件。

 

实现方法三:

[communicaBut addTarget:self action:@selector(offsetButtonTouchBegin:)forControlEvents:UIControlEventTouchDown];

[communicaBut addTarget:self action:@selector(offsetButtonTouchEnd:)forControlEvents:UIControlEventTouchUpInside];

[communicaBut addTarget:self action:@selector(offsetButtonTouchEnd:)forControlEvents:UIControlEventTouchUpOutside];

 

-(void) offsetButtonTouchBegin:(id)sender{

    NSLog(@"开始计时");

    count = 0;

    timer = [NSTimer scheduledTimerWithTimeInterval:0.1

                                           target: self

                                         selector: @selector(handleTimer:)

                                         userInfo: nil

                                          repeats: YES];

    [timer fire];

}

 

-(void) offsetButtonTouchEnd:(id)sender{

    NSLog(@"计时结束");

    [timer invalidate];

    NSLog(@"count = %f",count);

}

 

-(void) handleTimer:(id)sender{

    count = count + 0.1;

    NSLog(@"%f",count);

}

这种方法是从触发按钮到离开按钮的时间内(不固定)触发的事件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值