Utworzyłem UITextField
programowo, tworząc UITextField
właściwość viewController. Muszę odrzucić klawiaturę z powrotem i dotknięciem ekranu. Udało mi się dotknąć ekranu, aby zamknąć, ale naciśnięcie klawisza powrotu nie działa.
Widziałem, jak to zrobić za pomocą scenorysów oraz przez bezpośrednie przydzielanie i inicjowanie UITextField
obiektu bez tworzenia go jako właściwości. Można to zrobić?
.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, atomic) UITextField *username;
@end
.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor blueColor];
self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
self.username.placeholder = @"Enter your username";
self.username.backgroundColor = [UIColor whiteColor];
self.username.borderStyle = UITextBorderStyleRoundedRect;
if (self.username.placeholder != nil) {
self.username.clearsOnBeginEditing = NO;
}
_username.delegate = self;
[self.view addSubview:self.username];
[_username resignFirstResponder];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touchesBegan:withEvent:");
[self.view endEditing:YES];
[super touchesBegan:touches withEvent:event];
}
@end
ios
keyboard
uitextfield
noobsmcgoobs
źródło
źródło
Odpowiedzi:
Prostym sposobem jest podłączenie delegata
UITextField
do self (self.mytestField.delegate = self
) i odrzucenie klawiatury w metodzietextFieldShouldReturn
przy użyciu[textField resignFirstResponder];
Innym sposobem na zamknięcie klawiatury jest:
Umieść miejsce, w
[self.view endEditing:YES];
którym chcesz odrzucić klawiaturę (zdarzenie przycisku, zdarzenie Touch, itp.).źródło
Dodaj metodę delegata,
UITextField
taką jak ta:I ustaw,
textField.delegate = self;
a następnie dodaj dwie metody delegowaniaUITextField
źródło
@interface MyController : UIViewController <UITextFieldDelegate>
// Ukryj tablicę klawiszy, dotykając tła w widoku
źródło
po prostu użyj tego szybko, aby zamknąć klawiaturę:
Szybki 3
źródło
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
SWIFT 4:
lub
Ustaw delegata pola tekstowego na bieżący kontroler widoku, a następnie:
Cel C:
lub
Ustaw delegata pola tekstowego na bieżący kontroler widoku, a następnie:
źródło
W delegacie aplikacji możesz pisać
w ten sposób nie możesz pisać zbyt dużo kodu.
źródło
Spróbuj dowiedzieć się, czym jest osoba udzielająca pierwszej odpowiedzi w hierarchii widoków systemu iOS. Kiedy twoje pole tekstowe staje się aktywne (lub pierwsza pomoc) po dotknięciu w nim (lub przekazaniu mu komunikatu
becomeFirstResponder
programowo), wyświetla klawiaturę. Aby więc usunąć swoje pole tekstowe z bycia pierwszym respondentem, powinieneś przekazać tam wiadomośćresignFirstResponder
.Aby ukryć klawiaturę pod przyciskiem powrotu, należy zaimplementować metodę delegata
textFieldShouldReturn:
i przekazaćresignFirstResponder
komunikat.źródło
Oto, czego używam w moim kodzie. To działa jak urok!
W yourviewcontroller.h dodaj:
@property (nonatomic) UITapGestureRecognizer *tapRecognizer;
Teraz w pliku .m dodaj to do swojej funkcji ViewDidLoad:
Dodaj również tę funkcję w pliku .m:
źródło
Aby zamknąć klawiaturę po wyskakiwaniu klawiatury, istnieją 2 przypadki ,
gdy UITextField znajduje się wewnątrz UIScrollView
gdy UITextField znajduje się poza UIScrollView
2. gdy UITextField znajduje się poza UIScrollView, zastąp metodę w podklasie UIViewController
musisz również dodać delegata dla wszystkich UITextView
aby utworzyć IBAction, naciśnij ctrl + kliknij UITapGesture i przeciągnij go do pliku .h programu viewcontroller.
Tutaj nazwałem tappedEvent jako moją nazwę akcji
powyższe informacje pochodzą z poniższego linku, proszę zapoznać się z dodatkowymi informacjami lub skontaktować się ze mną, jeśli nie rozumiesz powyższych danych.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
źródło
Dla grupy
UITextView
s wewnątrz aViewController
:Swift 3.0
Cel C
źródło
Wiem, że odpowiedzieli na to inni, ale znalazłem inny artykuł, który obejmował również wydarzenie bez tła - widok tabeli lub widok przewijania.
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
źródło
Ponieważ tagi mówią tylko o iOS i opublikuję odpowiedź dla Swift 1.2 i iOS 8.4, dodaj je do klasy swift kontrolera widoku:
Nie zapomnij również dodać UITextFieldDelegate w deklaracji klasy i ustawić delegata pól tekstowych na siebie (widok).
źródło
W Swift 3
LUB
źródło
Oto, co zrobiłem, aby odrzucić po dotknięciu tła lub powrocie. Musiałem dodać delegate = self w viewDidLoad, a następnie także metody delegata później w plikach .m.
źródło
Po prostu użyj tego w Objective-C, aby odrzucić klawiaturę:
źródło
Najpierw musisz dodać delegata pola tekstowego w pliku .h. jeśli nie, zadeklaruj, że
(BOOL)textFieldShouldReturn:(UITextField *)textField
ta metoda nie jest wywoływana. więc najpierw dodaj delegata i zapisz kod ukrywania klawiatury w tej metodzie.Spróbuj tego..
źródło
Dodaj delegata: UITextFieldDelegate
a następnie dodaj tę metodę delegata
// To powinno działać idealnie
źródło
gdy używasz więcej niż jednego pola tekstowego na ekranie Dzięki tej metodzie nie musisz za każdym razem wspominać o polu tekstowym, np
źródło
Swift 2:
to jest to, co robi się, aby zrobić wszystko!
zamknij klawiaturę
Done
przyciskiem lubTouch outSide
,Next
aby przejść do następnego wejścia.Najpierw zmień plik TextFiled
Return Key
naNext
w StoryBoard.źródło
Jeśli nie znasz bieżącego kontrolera widoku lub widoku tekstowego, możesz użyć łańcucha odpowiedzi:
źródło
dla szybkiego 3-4 naprawiłem jak
po prostu skopiuj wklej w dowolnym miejscu na zajęciach. To rozwiązanie po prostu działa, jeśli chcesz, aby wszystkie UItextfield działały tak samo lub jeśli masz tylko jedno!
źródło