Szukałem tego wszystkiego, ale nie mogę tego znaleźć. Wiem, jak zamknąć klawiaturę, Objective-C
ale nie mam pojęcia, jak to zrobić Swift
? Czy ktoś wie?
ios
swift
uikeyboard
laguna
źródło
źródło
Odpowiedzi:
Oto inny sposób wykonania tego zadania, jeśli zamierzasz korzystać z tej funkcji na wiele sposobów
UIViewControllers
:Teraz
UIViewController
wystarczy, że wywołasz tę funkcję:Ta funkcja jest zawarta jako standardowa funkcja w moim repozytorium, która zawiera wiele przydatnych rozszerzeń Swift, takich jak ta, sprawdź: https://github.com/goktugyil/EZSwiftExtensions
źródło
didSelectRowAtIndexPath
.tap.cancelsTouchesInView = false
. To przynajmniej dla mnie rozwiązało. Mam nadzieję, że to komuś pomożePoniżej znajduje się odpowiedź na pytanie, jak usunąć klawiaturę w Xcode 6.1 za pomocą Swift:
( Źródło tej informacji ).
źródło
Swift 4 działa
Utwórz rozszerzenie jak poniżej i zadzwoń
hideKeyboardWhenTappedAround()
w kontrolerze widoku podstawowego.Najważniejsze, aby zadzwonić w kontrolerze widoku podstawowego, aby nie trzeba było dzwonić cały czas we wszystkich kontrolerach widoku.
źródło
Możesz zadzwonić
w dowolnej instancji UIResponder, takiej jak UITextField. Jeśli wywołasz go w widoku, który obecnie powoduje wyświetlenie klawiatury, klawiatura się odłączy.
źródło
źródło
w przypadku Swift 3 jest to bardzo proste
jeśli chcesz ukryć klawiaturę po naciśnięciu klawisza RETURN
ale w drugim przypadku musisz także przekazać delegata ze wszystkich pól tekstowych do ViewController w Main.Storyboard
źródło
unrecognized selector sent to instance
z tym kodem.Swift 3: Najłatwiejszy sposób na wyłączenie klawiatury:
źródło
Odpowiedź Dash'a jest poprawna i preferowana. Bardziej „spieczona ziemia” to podejście
view.endEditing(true)
. To powodujeview
i wszystkie jego podviews doresignFirstResponder
. Jeśli nie masz odniesienia do widoku, który chcesz odrzucić, jest to hackerskie, ale skuteczne rozwiązanie.źródło
swift 5 wystarczy dwie linie. Dodaj do
viewDidLoad
powinien działać.Jeśli gest stuknięcia zablokował inne dotknięcia, dodaj następujący wiersz:
źródło
W scenorysie:
źródło
Swift 3:
Rozszerzenie z
Selector
parametrem umożliwiającym wykonywanie dodatkowych czynności w funkcji zwalniania icancelsTouchesInView
zapobieganie zniekształceniom przy dotknięciach innych elementów widoku.Stosowanie:
źródło
Użyj IQKeyboardmanager , który pomoże ci rozwiązać proste .....
///////////////////////////////
! [jak wyłączyć klawiaturę ..] [1]
źródło
Znalazłem najlepsze rozwiązanie z zaakceptowaną odpowiedzią @Esqarrouth, z pewnymi poprawkami:
Linia
tap.cancelsTouchesInView = false
była krytyczna: zapewnia, żeUITapGestureRecognizer
nie uniemożliwia innym elementom widoku interakcji z użytkownikiem.Metodę
dismissKeyboard()
zmieniono na nieco mniej eleganckądismissKeyboardView()
. Jest tak, ponieważ w dość starej bazie kodu mojego projektu wiele razydismissKeyboard()
był już używany (wyobrażam sobie, że nie jest to rzadkie), powodując problemy z kompilatorem.Następnie, jak wyżej, to zachowanie można włączyć w poszczególnych kontrolerach widoku:
źródło
Jeśli używasz widoku przewijania, może to być znacznie prostsze.
Po prostu wybierz
Dismiss interactively
w serii ujęć.źródło
W Swift 4 dodaj @objc:
W viewDidLoad:
Funkcjonować:
źródło
Dodaj to rozszerzenie do ViewController:
źródło
Aby rozwinąć odpowiedź Esqarrouth , zawsze używam następującego polecenia, aby zamknąć klawiaturę, szczególnie jeśli klasa, z której zwalniam klawiaturę , nie ma
view
właściwości i / lub nie jest podklasąUIView
.I dla wygody następujące rozszerzenie
UIApplcation
klasy:źródło
źródło
Jako początkujący programista może być mylące, gdy ludzie produkują bardziej wykwalifikowane i niepotrzebne odpowiedzi ... Nie musisz wykonywać żadnych skomplikowanych czynności pokazanych powyżej! ...
Oto najprostsza opcja ... W przypadku pojawienia się klawiatury w odpowiedzi na pole tekstowe - Wewnątrz funkcji ekranu dotykowego wystarczy dodać funkcję resignFirstResponder . Jak pokazano poniżej - klawiatura zostanie zamknięta, ponieważ zwolniony jest pierwszy obiekt odpowiadający (wyjście z łańcucha obiektu odpowiadającego) ...
źródło
Używam IQKeyBoardManagerSwift dla klawiatury. jest łatwy w użyciu. wystarczy dodać pod „IQKeyboardManagerSwift”
Zaimportuj IQKeyboardManagerSwift i napisz kod
didFinishLaunchingWithOptions
wAppDelegate
.źródło
Ta jedna linijka rezygnuje z klawiatury ze wszystkich (dowolnych) pól UITextField w UIView
źródło
W szybki sposób możesz użyć
źródło
Dla Swift3
Zarejestruj moduł rozpoznawania zdarzeń w viewDidLoad
następnie musimy dodać gest do widoku w tym samym viewDidLoad.
Następnie musimy zainicjować zarejestrowaną metodę
źródło
Publikowanie jako nowej odpowiedzi, ponieważ moja edycja odpowiedzi @ King-Wizard została odrzucona.
Uczyń swoją klasę delegatem UITextField i unieważnij touchBEG.
Szybki 4
źródło
Tylko jeden wiersz kodu w
viewDidLoad()
metodzie:źródło
Możesz także dodać rozpoznawanie gestów, aby zrezygnować z klawiatury. :RE
źródło
Inną możliwością jest po prostu dodanie dużego przycisku bez treści, która leży pod wszystkimi widokami, których możesz potrzebować dotknąć. Daj mu akcję o nazwie:
Problem z rozpoznawaniem gestów był dla mnie taki, że przechwytywał on także wszystkie dotknięcia, które chciałem otrzymać przez tableViewCells.
źródło
Jeśli masz inne widoki, które również powinny zostać dotknięte, musisz je ustawić
cancelsTouchesInView = false
Lubię to:
źródło
Spróbuj tego, działa
źródło
Gdy w widoku jest więcej niż jedno pole tekstowe
Aby postępować zgodnie z zaleceniami @ modocache, aby uniknąć dzwonienia
view.endEditing()
, możesz śledzić pole tekstowe, które stało się pierwszą odpowiedzią, ale jest niechlujne i podatne na błędy.Alternatywą jest wywołanie
resignFirstResponder()
wszystkich pól tekstowych w kontroler widoku . Oto przykład tworzenia kolekcji wszystkich pól tekstowych (które w moim przypadku i tak były potrzebne do kodu weryfikacyjnego):Z dostępną kolekcją iteracja wszystkich z nich jest prosta:
Teraz możesz zadzwonić
dismissKeyboard()
w swoim rozpoznawaniu gestów (lub w dowolnym innym miejscu). Wadą jest to, że musisz zachować listęUITextField
s podczas dodawania lub usuwania pól.Komentarze mile widziane. Jeśli występuje problem z wywołaniem
resignFirstResponder()
elementów sterujących, które nie reagują jako pierwsze, lub jeśli istnieje łatwy i gwarantowany niezawodny sposób na śledzenie bieżącego pierwszego reagującego, chciałbym o tym usłyszeć!źródło