3

我有一个每行有两个按钮的 tableView,用户当然可以滚动查看更多行,或者可以点击按钮查看项目详细信息。

问题:

当用户向上或向下滑动手指时,表格滚动良好,但是当用户将手指按住按钮超过一秒钟然后向上或向下移动手指时,表格不会滚动。我不想要这种行为,我希望 tableview 将获得第一优先级,所以它会滚动并且按钮事件不会触发。

我怎样才能防止这种情况发生?为按钮设置目标的代码是这样的:

[cell.buttonLeft addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside]; 
4

2 回答 2

4

使用UITapGestureRecognizer而不是使用addTarget:

例子:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(aMethod:)];
[button addGestureRecognizer:tapGestureRecognizer];
[button setTitle:@"Show View" forState:UIControlStateNormal];

button.frame = CGRectMake(0, 0, 160.0, 40.0);
[cell.contentView addSubview:button];


-(void)aMethod:(UITapGestureRecognizer * )sender{

    if(sender.state == UIGestureRecognizerStateEnded)
    {
         NSLog(@"triggered");
    }
}
于 2013-03-27T18:04:53.640 回答
-1

如果您使用的是 IB,则可以向单元格(在 IB 中)添加一个按钮,修改其标签,然后将目标和操作添加到带有该标签的按钮。

UIButton *button = (UIButton *)[cell.contentView viewWithTag:1002];
    [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchUpInside];
于 2013-03-27T22:03:14.977 回答