UITableViewCell中的UIButton不会突出显示

时间:2014-02-11 23:11:13

标签: ios iphone objective-c ipad uibutton

问题:当用户点击UITableViewCell中的UIButton时,该按钮只会在长按时突出显示,而不是快速点按。无论点击持续时间如何,此按钮都会突出显示所需的行为。

不幸的是:在任何UIScrollView或UITableView上将delaysContentTouches设置为NO都不是一个选项,因为其他不良副作用。

所以:我该如何解决这个问题 - 有没有办法将触摸转发到按钮,绕过delayedContentTouches值?

5 个答案:

答案 0 :(得分:0)

在原型单元格中将按钮的标签设置为“1”。

在你的cellForRowAtIndexPath中你应该将UIButton链接到一个方法:

UIButton *button = (UIButton *)[cell viewWithTag:1];
[button addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchUpInside];

然后在方法中你要做的就是:

-(void) aMethod: (id) sender{


    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.cartTableView];
    NSIndexPath *indexPath = [self.cartTableView indexPathForRowAtPoint:buttonPosition];
    if (indexPath != nil)
     {
        //Do your stuff
    }
}

这不会在运行代码之前添加任何延迟。

答案 1 :(得分:0)

您需要创建一个UIButton类别(或子类,如果您不想影响所有其他按钮),并在touchesBegan中设置highlight = YES。

请参阅this answer中的代码以获取示例实现。

答案 2 :(得分:0)

这对我有用:

    @weakify(self);
[self.publishButton bk_addEventHandler:^(id sender) {
    @strongify(self);
    if (self.clickBlock) {
        self.clickBlock(self.draftModel);
    }
    [UIView animateWithDuration:0.1 animations:^{
        self.publishButton.backgroundColor = [UIColor whiteColor];
    }];
} forControlEvents:UIControlEventTouchUpInside];

[self.publishButton bk_addEventHandler:^(id sender) {
    self.publishButton.backgroundColor = [UIColor redColor];
} forControlEvents:UIControlEventTouchDown];

答案 3 :(得分:0)

使用主线程。

    dispatch_async(dispatch_get_main_queue(), ^{

    });

答案 4 :(得分:0)

只需将delayContentTouches = false设置为您正在使用的任何滚动视图(UITableView或UICollectionView)。那应该做。

医生说:

  

一个布尔值,该值确定滚动视图是否延迟了触地手势的处理。   如果此属性的值为true,则滚动视图会延迟处理触地手势,直到可以确定滚动是否是意图。如果该值为false,则滚动视图立即调用touchesShouldBegin(_:with:in :)。默认值为true。