Mam kilka UITextFields w UITableView. Użytkownik powinien mieć możliwość wstawiania tylko liczb i kropek. Aby to zrobić, ustawiam typ klawiatury na UIKeyboardTypeNumberPad i dodałem przycisk "." - w lewym dolnym rogu. Za każdym naciśnięciem przycisku wywoływana jest funkcja. Ta funkcja powinna wstawić kropkę w bieżącej pozycji kursora, ale jest to problem: UITextField nie ma właściwości selectedRange, więc nie jestem w stanie uzyskać aktualnej pozycji kursora. Czy ktoś wie, jak rozwiązać ten problem, czy jest jakiś inny sposób to zrobić? Dzięki.Wstaw ciąg znaków w pozycji kursora UITextField
Odpowiedz
W końcu znalazłem rozwiązanie tego problemu! Możesz umieścić tekst, który musi włożoną w kartonowe systemowym, a następnie wkleić go w bieżącej pozycji kursora:
[myTextField paste:self]
znalazłem rozwiązanie na blogu tej osoby:
http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html
Funkcjonalność pastę Specyficzny dla systemu operacyjnego V3.0, ale przetestowałem go i działa dobrze dla mnie z niestandardową klawiaturą.
Aktualizacja: Zgodnie z poniższym komentarzem Jasarien, dobrą praktyką jest najpierw zapisać zawartość spisu i przywrócić je później. Dla wygody, tu jest mój kodu:
// Get a reference to the system pasteboard
UIPasteboard* lPasteBoard = [UIPasteboard generalPasteboard];
// Save the current pasteboard contents so we can restore them later
NSArray* lPasteBoardItems = [lPasteBoard.items copy];
// Update the system pasteboard with my string
lPasteBoard.string = @"-";
// Paste the pasteboard contents at current cursor location
[myUIField paste:self];
// Restore original pasteboard contents
lPasteBoard.items = lPasteBoardItems;
[lPasteBoardItems release];
Odczytaj wartość pola tekstowego jako napisu po naciśnięciu przycisku. Zmodyfikuj ciąg, a następnie ustaw wartość pola na nowy ciąg.
Jeśli szukasz do tworzenia pól tekstowych, które pozwalają wprowadzić miejsca dziesiętne może i sugerują, że raczej rozwiązać przecinek pewną precyzją i pozwalają użytkownikowi na wprowadzanie liczb w następujący sposób:
Zakładając, że precyzja jest 2 punkty po przecinku:
start: value is 0.00
user enters 1: value is 0.01
user enters 2: value is 0.12
user enters 3: value is 1.23
user enters 4: value is 12.34
Zobacz What is the best way to enter numeric values with decimal points? dla podobnego rozwiązania dla waluty.
Jest to zdecydowanie prostsze rozwiązanie niż tworzenie niestandardowej klawiatury i radzenie sobie ze wszystkimi niuansami, które to podejście prezentuje. Jeśli jednak potrzebujesz dokładności o zmiennej długości, to podejście to może lepiej Ci pasować.
Dzięki. Myślę, że to najlepszy sposób. – WetFish
Jest teraz fantastyczny rodzaj numeryczna klawiatura, która zawiera punkt dziesiętny, bez konfiguracji potrzebne, poza ustalone (nie w IB, a nie opcję tam jeszcze) na UITextField
„s keyboardType
nieruchomość do UIKeyboardStyleDecimalPad
, tak:
textField.keyboardType = UIKeyboardTypeDecimalPad;
To nie wszystkie wyszukane rzeczy już stara się zrobić automatycznie.
- (void)insertText:(NSString *)text
dostępne w iOS 3.2 i później.
wydaje się być trafną odpowiedzią na to pytanie. – GoGreen
w Swift
to wstawienie tekstu w bieżącej pozycji kursora.
textField.insertText("Hello")
Moja pełna odpowiedź na temat pracy z pozycji kursora jest here.
To właśnie zadał pytanie. I doskonałe rozwiązanie. – oberbaum
To świetne rozwiązanie. Warto jednak wspomnieć o tym, że przed umieszczeniem zawartości na stole montażowym należy zapisać zawartość pulpitu użytkownika, a następnie przywrócić zawartość użytkownika. W ten sposób nie mają oni pojęcia, że korzystasz z tego obszaru roboczego, a twój kod jest dobrym obywatelem, ponieważ nie przekierowuje zawartości do obszaru roboczego użytkownika. – Jasarien
To rozwiązanie jest niezgodne z VoiceOver. Zamiast mówić o wstawionym znaku, po prostu mówi "Wklej". –