2013-06-09 8 views
7

Mam ten problem i nie mogę znaleźć żadnej innej wzmianki o tym w dowolnym miejscu.Wskaźnik przesuwania się zatrzymuje, gdy odbijanie jest wyłączone dla UIScrollView

Zasadniczo, jeśli wyłączę podskakiwanie w UIScrollView (w ten sposób wpływają również na pochodne, takie jak UITableView), można zablokować wskaźnik przewijania, jeśli użytkownik przewinie do góry, a następnie, wykonując kolejny gest, spróbuje kontynuować przewijanie za pomocą szybkiego machnięcia.

Gdy to się stanie, wskaźnik przewijania nie zniknie, dopóki użytkownik nie przewinie ponownie lub nie dotknie przewijania. Największym problemem jest to, że widok przewijania przechwytuje ten dotknięcie, a więc jeśli spróbujesz dotknąć powiedz komórki tabeli, nic nie stanie się za pierwszym razem.

Testowałem to tylko z aplikacją barebones zarówno na moim urządzeniu, jak i symulatorze, i wydaje się, że to tylko ogólny problem z UIScrollView i wyłączaniem odbijania; jednak, jak powiedziałem, nie mogę znaleźć żadnej innej wzmianki na ten temat w Internecie.

Czy to tylko błąd? Czy to oczekiwane zachowanie? czy robię coś źle? Jeśli jest to błąd, to czy ktoś wie o obejściu lub naprawie?

+0

Mam teraz ten sam lub podobny problem. Domyślam się, że włączę odbijanie na teraz ... Kiedy mówisz, kiedy ten problem wystąpi, następne dotknięcie będzie "połknięte" przez widok tabeli, tak, że komórka musi zostać dotknięta dwa razy, aby zostać wybranym itp. – Jonny

+0

Witajcie, czy znaleźliście rozwiązanie tego zachowania? Dzięki. – apascual

Odpowiedz

0

Czy dodałeś gest dotykowego do swojego przewijania, jeśli nie, spróbuj dodać?

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignsKeyboard)]; 
    [self.scrollView addGestureRecognizer:singleTap]; 
    singleTap.numberOfTapsRequired = 1; 
    singleTap.delegate = self; 

dodawania delegat UIGestureRecognizerDelegate w pliku interfejsu następnie wdrożyć gest tap metody delgate

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch 
{ 
if (self.scrollView.superview != nil) 
    { 
     if ([touch.view isKindOfClass:[UIButton class]]||[touch.view.superview.superview isKindOfClass:[UITableViewCell class]]||[touch.view.superview.superview.superview isKindOfClass:[UITableViewCell class]]||[touch.view.superview isKindOfClass:[UITableViewCell class]]) 
      // we touched our control surface 
     { 
      return NO; // ignore the touch 
     } 

    } 

    return YES; // handle the touch 
} 

// Aby wykonać inne czynności dotyczące przewijania dotyku jak rezygnacja klawiatury, należy użyć w razie potrzeby

-(void) resignsKeyboard 
{ 
    [self.view endEditing:YES]; 
    [self.scrollView setContentOffset:CGPointMake(0,0) animated:YES]; 
} 
Powiązane problemy