У меня есть viewController, который содержит UITableView. Это ViewController реализует UITableViewDelegate и UITableViewDataSource, и я также пытаюсь реализовать следующие методы:Невозможно вызвать touchhesBegan/touchhesMoved метод внутри viewController в iOS
touchesBegan touchesMoved touchesEnded
Однако эти методы не называют. Я пытаюсь вызвать эти методы в ответ пользователю коснувшись UIImageView, который находится внутри UITableView, но делать это только вызывает этот метод:
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self.view bringSubviewToFront:_imageView];
[UIView animateWithDuration:.3 animations:^{
CGRect rect = [self.view convertRect:[tableView rectForRowAtIndexPath:indexPath] fromView:tableView];
CGFloat floatx = _imageView.frame.origin.x - rect.origin.x;
_imageView.frame = CGRectMake(rect.origin.x + floatx, rect.origin.y, _imageView.frame.size.width, _imageView.frame.size.height);
}];
NSLog(@"Table row %d has been tapped", indexPath.row);
}
То, что я надеюсь, это продолжать вызывать этот метод, но и звоните:
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
if ([touch view] == _imageView) {
//need to make sure user can only move the UIImageView up or down
CGPoint location = [touch locationInView:_imageView];
//ensure UIImageView does not move outside UIITableView
CGPoint pt = [[touches anyObject] locationInView:_imageView];
CGRect frame = [_imageView frame];
//Only want to move the UIImageView up or down, not sideways at all
frame.origin.y += pt.y - _startLocation.y;
[_imageView setFrame: frame];
_imageView.center = location;
return;
}
}
, когда пользователь перетаскивает UIImageView внутри UITableView.
Может ли кто-нибудь увидеть, что я делаю неправильно?
Заранее спасибо всем, кто ответил
Большое спасибо за ваш ответ. В каком методе я помещаю ваш блок кода: UIPanGestureRecognizer * panGesture; panGesture = [[UIPanGestureRecognizer alloc] initWithTarget: self action: @selector (panGestureDetected :)]; panGesture.maximumNumberOfTouches = 1; panGesture.minimumNumberOfTouches = 1; panGesture.delegate = self; [self.tableView addGestureRecognizer: panGesture]; ? – syedfa
Ну, вы можете поместить его, когда захотите, чтобы он начал следить за жесты для переноски, поэтому я предлагаю вам поместить его в метод - (void) viewDidLoad {} – yliu1021
И еще одна важная вещь. Не забудьте поставить в файл заголовка –
yliu1021