识别禁用的 UIButton 上的单击或手势事件

Posted

技术标签:

【中文标题】识别禁用的 UIButton 上的单击或手势事件【英文标题】:Recognize click or gesture event on disabled UIButton 【发布时间】:2013-10-04 04:22:15 【问题描述】:

我的按钮被禁用,但我想在用户点击它时显示一个消息框。我该怎么做?另外我想提一下UIbutton是在UITableview上添加的,我尝试了下面的代码,但它总是在DisableClick()函数中转到else

cellForRowAtIndexPath:

button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setFrame:CGRectMake(180, 6, 30, 30)];
    [button setTag:4000];
    [button addTarget:self action:@selector(click:event:) forControlEvents:UIControlEventTouchDown];
    UITapGestureRecognizer* gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(DisableClick:)];
    [self.view addGestureRecognizer:gesture];
    [gesture release];
    [cell.contentView addSubview:button];

DisableClick()

- (void)DisableClick:(UIButton*)sender 
    UITapGestureRecognizer *recognizer = (UITapGestureRecognizer *)sender;
    CGPoint pt = [recognizer locationOfTouch:0 inView:market];
    if (CGRectContainsPoint(market.bounds, pt)) 
        NSLog(@"Disabled button tapped");

    
    else 
    
     NSLog(@"go out"); // it's always go to here
    


【问题讨论】:

【参考方案1】:

与其禁用按钮,不如让它保持启用状态。更改按钮的图像,如禁用图像。在点击按钮时放置一个标志变量,使用这个标志变量来运行启用按钮和禁用按钮的代码

BOOL btnFlg;//initialize it true or false on cellForRowAtIndex... method
- (void)DisableClick:(UIButton*)sender 

   if(btnFlg)
   
           btnFlag=NO;
           NSLog("button disabled");
   
   else
   
          btnFlag=YES;
          NSLog("button enabled");
   

【讨论】:

谢谢,但不能使用手势? 为什么要使用手势?对于什么样的功能?无需手势即可轻松实现所需。【参考方案2】:

为什么要为这个按钮初始化一个点击手势。您在 addTarget

中设置选择器

为按钮状态维护一个 btn 布尔值。在您想要禁用或启用时更改状态。

BOOL btnEnabled;

 button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setFrame:CGRectMake(180, 6, 30, 30)];
    [button setTag:4000];
    [button addTarget:self action:@selector(DisableClick:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:button];

将目标函数设为

- (void)DisableClick:(UIButton*)sender 

    //set the function that you needed when the user tap on this button here.
    if(btnEnabled)  
     // here invoke the functions you needed when the button enabled
     else 
       UIAlertView *msg = [[UIAlertView alloc]initWithTitle:@"Alert" message:@"Your button is disabled" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
       [msg show];
    


【讨论】:

不,因为我想当按钮启用时,它会调用其他函数。当按钮禁用时,我希望当用户单击此按钮时,它会显示一个消息框【参考方案3】:

您需要继承 UIButton 并实现 touchesBegan:withEvent: 和 touchesEnded:withEvent: 方法用于您的目的。

【讨论】:

以上是关于识别禁用的 UIButton 上的单击或手势事件的主要内容,如果未能解决你的问题,请参考以下文章

UIButton上的长按手势识别器?

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

计数按钮事件

如何禁用标准 UIButton 触摸事件

用户单击时如何禁用 UIButton 的突出显示

如何禁用右键单击事件或如何隐藏 Autodesk Forge 查看器上的上下文菜单