To nie jest trudne wyzwanie.
Wstępnie powiem, że problem z tym podejściem jest spójny. Pamiętaj, że twoi użytkownicy używają palców, a nie stilii. Palec ma dużą powierzchnię, a trafienie w precyzyjną strefę pikseli jest dość trudne, szczególnie w przypadku małego tekstu. Sugerowałbym grę nie w symulatorze, gdzie masz precyzyjne urządzenie wskazujące, ale na urządzeniu.
Pierwszym wyzwaniem jest wyłączenie domyślnego zachowania się kranu lub UITextView
. Nie jest to trudne zadanie - możesz albo "zaatakować" problem na poziomie touchesBegan:withEvent:
, gdzie musisz zrozumieć, czym są te dotknięcia (dotknięcie pojedynczego przycisku w porównaniu z przesunięciem w porównaniu z długim naciśnięciem) lub na poziomie narzędzia do rozpoznawania gestów, gdzie wyłączyć wyłączne rozpoznawanie gestów w widoku tekstowym, które wyraźnie obsługują ruch kursora w przypadku dotknięcia (w porównaniu z innymi typami dotyku). Zrobiłem to drugie dla różnych projektów i jest to możliwe. Możesz także spróbować podejść bez wyłączania domyślnego zachowania, ale wtedy kursor może migać. Testuj i decyduj.
Teraz, aby osiągnąć to, czego potrzebujesz. W jakiś sposób uzyskaj punkt kontaktu (korzystając z interfejsu API UIResponder
lub rozpoznawania gestów). Pamiętaj, że widok tekstowy jest widokiem przewijania, który zawiera duży widok, do którego wciąga się treść. Konwertuj ten punkt dotyku, z układu współrzędnych widoku tekstowego, do układu współrzędnych widoku wewnętrznego, korzystając z interfejsu API convertPoint:
. Kiedy już, że można użyć menedżera układu widoku tekstowego, aby uzyskać indeks znaków w momencie dotyku:
NSUInteger chIdx = [self characterIndexForPoint:touchPoint inTextContainer:self.textContainer fractionOfDistanceBetweenInsertionPoints:NULL];
Można użyć tego indeksu, aby ustawić kursor w widoku tekstu za pomocą właściwości selectedRange
.
Czy to nie jest problem sprzętowy? Lub przynajmniej problem systemowy. W końcu na iPadzie jest sposób na "przesuwanie" punktu wstawiania tam, gdzie chcesz. Ale na iPhone'ie. Więc to nie zależy od ciebie. – matt
@matt Próbowałem tylko niektórych aplikacji do edytora kodu dla iPhone'a, niektóre z nich pozwalają na wstawienie punktu w dowolnym punkcie, ale nie jestem pewien, jak to osiągnęli. Na przykład w jednej z aplikacji, z tym tekstem 'System.out.println ("hello") ', użytkownik może wybrać dowolne miejsce w' UITextView', aby zmienić argument. – user2560886
edytory wyboru poziomu postaci (Coda i Pythonista?) Mogą nie używać UITextView. Można utworzyć niestandardowy widok edytora tekstów (zapoznaj się z dokumentem "Podręcznik programowania dla iOS"). – 9dan