Na klawiaturze numerycznej nie ma przycisku „Gotowe”. Kiedy użytkownik kończy wprowadzanie informacji numerycznych w polu tekstowym, jak mogę usunąć klawiaturę numeryczną?
Mogłem uzyskać przycisk „Gotowe” za pomocą domyślnej klawiatury, ale wtedy użytkownicy musieliby przełączyć się na klawisze numeryczne, aby wprowadzić cyfry. Czy istnieje sposób wyświetlenia przycisku „Gotowe” na klawiaturze numerycznej?
ios
iphone
user-input
Chilly Zhong
źródło
źródło
Oto adaptacja odpowiedzi Ludy na Swift:
W deklaracji swojej podklasy UIViewController umieść
w ViewDidLoad umieść:
i dodaj funkcje hoopla i hoopla (możesz swobodnie wybierać inne nazwy, wystarczy odpowiednio zmienić nazwy selektora w ViewDidLoad
źródło
UIBarButtonItemStyle.Bordered
jest przestarzałe od iOS 8.0.UIBarButtonItemStyle.Plain
zamiast tego jest sugerowane.Sztuczka, którą widziałem, polega na stworzeniu niestandardowego przezroczystego przycisku wielkości całego widoku, a następnie w metodzie kliknięcia, aby pole tekstowe zrezygnowało z pierwszej odpowiedzi. Użytkownik może kliknąć dowolne miejsce poza polem, aby zamknąć klawiaturę.
źródło
Rozwiązanie Swift 3 przy użyciu rozszerzenia. Idealny, jeśli masz
UITextField
w aplikacji kilka obiektów numerycznych, ponieważ daje to swobodę decydowania dla każdegoUITextField
, czy wykonać niestandardową akcję po dotknięciu Gotowe lub Anuluj .Przykład użycia z użyciem domyślnych działań:
Przykład użycia z użyciem niestandardowej czynności Gotowe :
źródło
Poniżej znajduje się przegląd odpowiedzi Ludy z następującymi zmianami:
widok akcesoriów jest automatycznie dopasowywany do szerokości ramki aplikacji
UIBarButtonItemStyleBordered
unika się przestarzałej stałejprzycisk „Gotowe” jest tworzony jako
UIBarButtonSystemItemDone
Obecnie przycisk „Gotowe” jest wyśrodkowany w widoku akcesoriów. Możesz ustawić go po lewej lub prawej stronie, usuwając spację po odpowiedniej stronie.
Pominąłem przycisk „Anuluj”, ponieważ domyślna klawiatura też go nie ma. Jeśli chcesz przycisk „Anuluj”, sugeruję utworzenie go jako a
UIBarButtonSystemItemCancel
oraz upewnienie się, że nie odrzucasz oryginalnej wartości w polu tekstowym. Zachowanie „Anuluj” zaimplementowane w odpowiedzi Ludy, które zastępuje wartość pustym ciągiem, może nie być tym, czego chcesz.Aby uzyskać więcej informacji na temat tworzenia widoków akcesoriów, zobacz dokumentację Apple dotyczącą niestandardowych widoków wprowadzania danych . Prawdopodobnie będziesz chciał również zajrzeć na strony referencyjne na UIToolbar i UIBarButtonItem .
źródło
[UIScreen mainScreen].applicationFrame
jest przestarzałe w iOS 9. Użyj[UIScreen mainScreen].bounds
Rozwiązanie w UIKeyboardTypeNumberPad i brakujący klawisz powrotu działa świetnie, ale tylko wtedy, gdy na ekranie nie ma innych pól tekstowych innych niż klawisze numeryczne.
Wziąłem ten kod i przekształciłem go w kontroler UIViewController, który możesz po prostu podklasować, aby klawisze numeryczne działały. Będziesz musiał pobrać ikony z powyższego linku.
NumberPadViewController.h:
i NumberPadViewController.m:
Cieszyć się.
źródło
Oto najnowszy kod. Po prostu dołącz #import „UIViewController + NumPadReturn.h” do swojego viewController.
Oto .h
I oni
źródło
O wiele łatwiejsze rozwiązanie
źródło
Jeśli masz wiele pól numerycznych, sugeruję podklasowanie UITextField, aby utworzyć NumericTextField, który zawsze wyświetla klawiaturę numeryczną z wykonanym przyciskiem. Następnie po prostu powiąż pola numeryczne z tą klasą w Konstruktorze interfejsów i nie będziesz potrzebować dodatkowego kodu w żadnym ze swoich kontrolerów widoku. Oto klasa Swift 3.0, której używam w Xcode 8.0.
Szybki 4.2
źródło
Uważam, że odpowiedź @ user1258240 jest dość zwięzła, ponieważ nie jest to tak proste, jak ustawienie
returnKeyType
właściwości.Chciałem po prostu wnieść do tego własne podejście „wielokrotnego użytku”:
źródło
SWIFT 3.0 Inny smak, wykorzystujący fragmenty niektórych poprzednich odpowiedzi.
źródło
Opisuję tutaj jedno rozwiązanie dla iOS 4.2+ , ale przycisk odrzucania znika po pojawieniu się klawiatury. To nie jest straszne, ale też nie idealne.
Rozwiązanie opisane w pytaniu połączonym powyżej zawiera bardziej elegancką iluzję, aby zwolnić przycisk, w której zanikam i przesuwam w pionie przycisk, aby uzyskać wrażenie, że klawiatura i przycisk zwalniają się razem.
źródło
Najprostszym sposobem jest:
Tworzenie niestandardowych przezroczysty przycisk i umieść go w lewym dolnym rogu, które będą miały taki sam
CGSize
jak w pustej przestrzeniUIKeyboardTypeNumberPad
. Przełącz (pokaż / ukryj) ten przycisk w polu tekstowymbecomeFirstResponder
, odpowiednio po kliknięciu przycisku.źródło
Oto najprostsze rozwiązanie, z jakim się zetknąłem. Nauczyłem się tego z książki Początek rozwoju iOS 5.
Zakładając, że pole numeru jest wywoływane
numberField
.W
ViewController
dodaj następującą metodę:W
ViewController.m
dodaj następujący kod:Wróć do
nib
pliku.Utilities
patelnię.Identity inspector
podUtilities
patelnię.View
(w pliku stalówki). Upewnij się, że nie kliknąłeś żadnego elementu w widoku. Dla wyjaśnienia, powinieneś zobaczyć UIView podClass
wIdentity inspector
.Connection Inspector
.Touch Down
i upuść strzałkę naFile Owner
ikonę. (FYI ... Ikona właściciela pliku jest wyświetlana po lewej stronieView
i pojawia się jako pusta kostka z żółtą ramką.)closeKeyboard
.Teraz, gdy klikniesz gdziekolwiek w tle
View
, powinieneś być w stanie zwolnić klawiaturę.Mam nadzieję, że pomoże to rozwiązać problem. :-)
źródło
Zmodyfikowałem rozwiązanie Bryana, aby było trochę bardziej niezawodne, aby działało ładnie z innymi typami klawiatur, które mogłyby pojawiać się w tym samym widoku. Jest to opisane tutaj:
Utwórz przycisk GOTOWE na klawiaturze numerycznej UIKeyboard na iOS
Spróbuję to wyjaśnić tutaj, ale większość z nich to kod do sprawdzenia, który łatwo by się tutaj nie zmieścił
źródło
Jeśli znasz z góry liczbę cyfr, które należy wprowadzić (np. 4-cyfrowy kod PIN), możesz automatycznie odrzucić po 4 naciśnięciach klawiszy, zgodnie z moją odpowiedzią na to podobne pytanie:
zwalnianie klawiatury numerycznej
W tym przypadku nie ma potrzeby używania dodatkowego przycisku.
źródło
Możemy również uprościć rozwiązanie „dotknięty użytkownik gdzie indziej” , jeśli po prostu powiemy naszemu kontrolerowi widoku, aby zakończył edytowanie:
... zakładając, że „dotykanie gdzie indziej powoduje wyłączenie klawiatury” jest pożądanym zachowaniem również dla innych edytowalnych pól w widoku.
źródło
W Swift 2.2 używam tego
źródło
Wszystkie te implementacje dotyczące znajdowania widoku klawiatury i dodawania gotowego przycisku w trzecim rzędzie (dlatego button.y = 163 b / c wysokość klawiatury wynosi 216) są kruche, ponieważ iOS ciągle zmienia hierarchię widoku. Na przykład żaden z powyższych kodów nie działa w systemie iOS9.
Myślę, że bezpieczniej jest po prostu znaleźć najwyższy widok według [[[Windows [aplikacja współużytkowana przez UIApplication]]] LastObject] i po prostu dodać przycisk w lewym dolnym rogu, doneButton.frame = CGRectMake (0, SCREEN_HEIGHT-53, 106 , 53); // tryb pionowy
źródło
Swift 2.2 / Użyłem odpowiedzi Dx_. Chciałem jednak tę funkcję na wszystkich klawiaturach. Więc w mojej klasie bazowej umieściłem kod:
Następnie wystarczy wywołać addDoneButtonForTextFields na self.view.subviews w viewDidLoad (lub willDisplayCell, jeśli używasz widoku tabeli), aby dodać przycisk Gotowe do wszystkich klawiatur.
źródło