2013-06-19 4 views
0

У меня есть 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.

Может ли кто-нибудь увидеть, что я делаю неправильно?

Заранее спасибо всем, кто ответил

ответ

2

у меня была аналогичная проблема с этим исключением я пытался реализовать сенсорную обнаружение на UIWebView. В конце концов я перебрал его, добавив UIPanGestureRecognizer к свойству U12Web.

Реализуйте этот метод:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; }

, а затем добавить UIPanGestureRecognizer в UITableView так:

UIPanGestureRecognizer *panGesture; panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureDetected:)]; panGesture.maximumNumberOfTouches = 1; panGesture.minimumNumberOfTouches = 1; panGesture.delegate = self; [self.tableView addGestureRecognizer:panGesture];

, а затем реализовать метод

- (void)panGestureDetected:(UIPanGestureRecognizer *)recognizer { }

Теперь, каждый раз, когда UIPanGestureRecognizer обнаруживает жест панорамы, он вызывается этим методом, и вы можете получить местоположение UIPanGestureRecognizer, вызвав метод [recognizer locationInView:self.tableView.view];, который вернет CGPoint. Вы также можете получить состояние UIPanGestureRecognizer, вызвав [recognizer state], который возвращает UIGestureRecognizerState.

+0

Большое спасибо за ваш ответ. В каком методе я помещаю ваш блок кода: UIPanGestureRecognizer * panGesture; panGesture = [[UIPanGestureRecognizer alloc] initWithTarget: self action: @selector (panGestureDetected :)]; panGesture.maximumNumberOfTouches = 1; panGesture.minimumNumberOfTouches = 1; panGesture.delegate = self; [self.tableView addGestureRecognizer: panGesture]; ? – syedfa

+1

Ну, вы можете поместить его, когда захотите, чтобы он начал следить за жесты для переноски, поэтому я предлагаю вам поместить его в метод - (void) viewDidLoad {} – yliu1021

+1

И еще одна важная вещь. Не забудьте поставить в файл заголовка – yliu1021

0

Вы установили userInteractionEnabled на свой взгляд, что штрихи будут внутри?

+0

Большое спасибо за ваш ответ. К сожалению, я еще этого не сделал. – syedfa

+1

Если вы его установите, возможно, это сработает. – morningstar

Смежные вопросы