/ / Wykryj UITextView przewiń lokalizację - ios, cocoa, uitextview, uitextviewdelegate

Wykryj UITextView przewiń lokalizację - ios, cocoa, uitextview, uitextviewdelegate

Próbuję wprowadzić formę Warunków iStrona Warunki, w której przycisk "Kontynuuj" jest aktywny tylko po przewinięciu użytkownika na spód UITextView. Do tej pory ustawiłem moją klasę jako delegata UIScrollView i zaimplementowałem poniższą metodę:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSLog(@"Checking if at bottom of UITextView");
CGPoint bottomOffset = CGPointMake(0,self.warningTextView.frame.size.height);
//if ([[self.warningTextView contentOffset] isEqualTO:bottomOffset])
{
}
}

Skomentowałem instrukcję if, ponieważ nie jestem pewien, jak sprawdzić, czy UITextView jest na dole. Czy ktoś ma jakieś sugestie?

Wielkie dzięki, James

Odpowiedzi:

13 dla odpowiedzi nr 1

UITextView jest podklasą UIScrollView. Dlatego używana metoda delegata UIScrollView jest również dostępna podczas korzystania z UITextView.

Zamiast używać scrollViewDidEndDecelerating, powinieneś użyć scrollViewDidScroll, ponieważ przewijanie może zatrzymać przewijanie bez opóźnienia.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.frame.size.height)
{
NSLog(@"at bottom");
}
}

1 dla odpowiedzi nr 2

Wersja Swift dla tego pytania:

func scrollViewDidScroll(_ scrollView: UIScrollView) {

if (scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.frame.size.height) {

print( "View scrolled to the bottom" )

}
}

0 dla odpowiedzi № 3

To powinno rozwiązać problem. To działa. Używam tego.

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
float bottomEdge = scrollView.contentOffset.y + scrollView.frame.size.height;
if (bottomEdge >= scrollView.contentSize.height)
{
// we are at the end
}
}