我正在尝试实现一个uitableview,它的行可以向右和向左拖动(并在它们后面显示一些东西)。 代码工作正常,我使用以下方法实现它:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;
我的问题是这些行还包含UIButtons,点击它们时应该点击但是在拖动时应该拖动整个单元格。 我找到了 this 解决方案。基本上是在点击UIButtons时冒泡事件:
[super touchesBegan:touches withEvent:event];
[self.nextResponder touchesBegan:touches withEvent:event];
但是,似乎事件touchesMoved
只有泡一次。
我在这方面看到了各种各样的问题。 Example。但我没有看到任何解决方案或回应。
任何帮助,建议或创意解决方法都将不胜感激!
答案 0 :(得分:0)
只需使用标签系统检查是否触摸了哪一个。
答案 1 :(得分:0)
为什么不使用UIPanGestureRecognizer而不是实现touchesBegan等?我用一个简单的矩形视图对其进行了测试,该视图主要由UIButton覆盖。无论我触摸到哪里,视图都被拖动,如果我点击按钮,按钮方法就会被触发。
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)];
[self.theView addGestureRecognizer:panGesture]; //theView is IBOutlet for small view containing a button
}
-(void)viewDidAppear:(BOOL)animated {
self.currentViewFrame = self.theView.frame;
}
- (IBAction)handlePanGesture:(UIPanGestureRecognizer *)sender {
CGPoint translate = [sender translationInView:self.view];
CGRect newFrame = self.currentViewFrame;
newFrame.origin.x += translate.x;
newFrame.origin.y += translate.y;
sender.view.frame = newFrame;
if (sender.state == UIGestureRecognizerStateEnded)
self.currentViewFrame = newFrame;
}
-(IBAction)doClick:(id)sender {
NSLog(@"click");
}