My UITextView delegata loguje pozycji daszka przy użyciu następujących:UITextView dostarczenie nieprawdziwych daszka rect
- (void)textViewDidBeginEditing:(UITextView *)textView
{
CGPoint cursorPosition = [textView caretRectForPosition:textView.selectedTextRange.start].origin;
NSLog(@"cursor: %@", NSStringFromCGPoint(cursorPosition));
}
Ale zgłaszane pozycja zawsze jest niedokładna. W szczególności raportuje pozycję poprzednie kursor - na przykład, jeśli kliknę raz wewnątrz widoku tekstu w pozycji (x, y), a następnie na zewnątrz, a następnie z powrotem w (x2, y2), po drugim kliknięciu (x, y) współrzędne są rejestrowane.
W rzeczywistości problemem jest selectedTextRange - zgłaszany jest poprzedni zakres.
Czego mi brakuje? Nie widzę innej metody delegatów, której mogę użyć zamiast tego.
Jest to bardzo zaskakujące, ponieważ metoda delegata to * zrobił * BeginEditing, a nie * będzie * BeginEditing. Czy masz źródło lub jakieś inne informacje? Nie mogę użyć sugerowanej metody, ponieważ będzie ona uruchamiana za każdym razem, gdy użytkownik zmieni zaznaczenie, które nie jest tym, czego szukam. –
Nie, nie mam odniesienia do dokumentacji dotyczącej kopii zapasowej. Moje twierdzenie jest oparte wyłącznie na eksperymentach, które zrobiłem. Ale czy nie jest oczywiste, że _didBegin_ rzeczywiście odnosi się do początku jakiegoś procesu edycji. Jeśli spróbujemy narysować analogię z __UITextField__ _delegates_; _didBeginEditing_ nie oznacza, że treść została zmieniona. Tylko moje przemyślenia :) – Gandalf
To kazało mi wyciągać włosy na długie godziny. Dzięki. – BallpointBen