问题:当用户点击UITableViewCell中的UIButton时,该按钮只会在长按时突出显示,而不是快速点按。无论点击持续时间如何,此按钮都会突出显示所需的行为。
不幸的是:在任何UIScrollView或UITableView上将delaysContentTouches设置为NO都不是一个选项,因为其他不良副作用。
所以:我该如何解决这个问题 - 有没有办法将触摸转发到按钮,绕过delayedContentTouches值?
答案 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。