识别禁用的 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 上的单击或手势事件的主要内容,如果未能解决你的问题,请参考以下文章