/ / oddzielne urządzenia do rozpoznawania gestów w nagłówku uitableview - ios, iphone, obiektyw-c, xcode, uitableview

oddzielne rozpoznawanie gestów w nagłówku uitableview - ios, iphone, target-c, xcode, uitableview

Czy istnieje proste rozwiązanie dodawania wieluUITapGestureRecognizers? Mam nagłówek widoku tabeli, który zawiera UIImageView. Wokół krawędzi widoku obrazu jest wolne miejsce na nagłówek. To, co próbuję osiągnąć, to dodanie metody stuknięcia dla nagłówka i metody stuknięcia dla widoku obrazu. Ale dodanie jednego do nagłówka wykorzystuje cały nagłówek, w tym widok obrazu. Czy istnieje sposób na ich rozdzielenie?

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
UIView *header = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 250)];
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(35, 10, 250, 250)];
_imageView = imageView;
_imageView.image = imageData;
UITapGestureRecognizer *headerTap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(headerTapped:)];
_headerTap = headerTap;
UITapGestureRecognizer *imagetap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(imageTapped:)];
_imagetap = imagetap;
[header addGestureRecognizer:_headerTap];
[_imageView addGestureRecognizer:_imagetap];
[header addSubview:_imageView];
return header;
}

Odpowiedzi:

3 dla odpowiedzi № 1

Zrób przezroczysty przycisk pokrywający cały nagłówek.
Umieść nad nim widok obrazu i zakryj go innym przezroczystym przyciskiem.


1 dla odpowiedzi nr 2

Można tego dokonać słuchając metod delegowania funkcji rozpoznawania gestów. W zależności od konfiguracji widoków możesz użyć

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch

aby zdecydować, czy chcesz, aby Twój rozpoznawacz strzelał. Na przykład mamy aplikację z rozwijanym widokiem tabeli do wykonywania wyborów. Zainstalowaliśmy dwa urządzenia rozpoznające, jeden w oknie, abyśmy mogli „rozwinąć” listę rozwijaną, gdy użytkownik dotknie jej na zewnątrz, a drugą na „przycisku”, który jest tylko zawartością komórki. Używamy tej metody do określenia, czy dotyk był poza naszymi widocznymi widokami tabeli, a jeśli tak, odrzucamy go.

Inną odpowiednią metodą delegowania jest

(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

Z Twojego opisu wydaje się, że najlepiej z niego korzystać. Z tego możesz powiedzieć swojemu rozpoznawaczowi gestów nagłówków, aby nie strzelał obok tego w widoku obrazu. Na przykład

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
if (gestureRecognizer == self.headerGestureReconizer && otherGestureRecognizer == self.imageViewGestRecognizer) {
return NO;
}

return YES;
}

Można również skonfigurować zależności w programach rozpoznawania gestów za pomocą metody instancji (void)requireGestureRecognizerToFail:(UIGestureRecognizer *)otherGestureRecognizer. Jest to najbardziej przydatne, gdy masz coś takiego jak pojedynczy kran i podwójny stukacz w tym samym widoku i nie jest tym, czego chcesz w tej sytuacji.