爲UIButton添加長按事件的三種方法

實現方法一:重寫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);

}

這種方法是從觸發按鈕到離開按鈕的時間內(不固定)觸發的事件

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章