iOS-Wyłącz klawiaturę podczas dotykania poza UITextField

Zastanawiam się, jak sprawić, by klawiatura zniknęła, gdy użytkownik dotknie poza UITextField.

Author: Tamás Sengel, 2011-03-15

30 answers

Musisz dodać UITapGestureRecogniser i przypisać go do widoku, a następnie wywołać rezygnację pierwszego odpowiedzi na UITextField w selektorze.

Kod:

In viewDidLoad

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

In:

-(void)dismissKeyboard 
{
    [aTextField resignFirstResponder];
}

(gdzie aTextField to pole tekstowe odpowiedzialne za klawiaturę)

Wersja Swift 3 wygląda tak

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.dismissKeyboard (_:)))
self.view.addGestureRecognizer(tapGesture)

For disclosure

func dismissKeyboard (_ sender: UITapGestureRecognizer) {
    aTextField.resignFirstResponder()
}
 720
Author: Jensen2k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-16 07:29:49

Zebrałem kilka odpowiedzi.

Użyj ivar, który zostanie zainicjowany podczas viewDidLoad:

UIGestureRecognizer *tapper;

- (void)viewDidLoad
{
    [super viewDidLoad];
    tapper = [[UITapGestureRecognizer alloc]
                initWithTarget:self action:@selector(handleSingleTap:)];
    tapper.cancelsTouchesInView = NO;
    [self.view addGestureRecognizer:tapper];
}

Odrzuć to, co aktualnie edytuje:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}
 168
Author: drewish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 18:42:49

Sprawdź to, to byłby najprostszy sposób, aby to zrobić,

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
      [self.view endEditing:YES];// this will do the trick
}

Lub

Ta biblioteka będzie obsługiwać automatyczne przewijanie paska przewijania, stukanie spacji, aby ukryć klawiaturę itp...

Https://github.com/michaeltyson/TPKeyboardAvoiding

 100
Author: Prasad De Zoysa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-20 05:38:16

Widzę, że niektórzy mają problemy z użyciem metody UITapGestureRecognizer. Najprostszym sposobem, w jaki osiągnąłem tę funkcjonalność, pozostawiając nienaruszone zachowanie mojego istniejącego przycisku, jest dodanie tylko jednej linii do odpowiedzi @Jensen2k:

[tap setCancelsTouchesInView:NO];

To pozwoliło moim istniejącym przyciskom nadal działać bez użycia metody @ Dmitry Sitnikov.

Przeczytaj o tym property tutaj (Szukaj CancelsTouchesInView): Uigesturerecognizer Class Reference

Nie jestem pewien, jak to będzie działać z scrollbars, jak widzę niektóre miały problemy, ale mam nadzieję, że ktoś inny może uruchomić w tym samym scenariuszu miałem.

 82
Author: Qiao Yi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-23 09:32:26

Lepiej zrobić UIView instancję UIControl (w interface builder), a następnie podłączyć ich Zdarzenie TouchUpInside do metody dismissKeyboard. Ta metoda IBAction będzie wyglądać następująco:

- (IBAction)dismissKeyboard:(id)sender {
    [aTextBox resignFirstResponder];
}
 55
Author: Dmitry Sitnikov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-23 08:57:11

Wersja Swift, działa w połączeniu z innymi elementami (np. UIButton lub innym UITextField):

override func viewDidLoad() {
    super.viewDidLoad()

    let tapper = UITapGestureRecognizer(target: self, action:#selector(endEditing))
    tapper.cancelsTouchesInView = false
    view.addGestureRecognizer(tapper)
}
 25
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-02 09:54:06

A może tak: Wiem, że to stary post. To może komuś pomóc:)

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {  
    NSArray *subviews = [self.view subviews];
    for (id objects in subviews) {
        if ([objects isKindOfClass:[UITextField class]]) {
            UITextField *theTextField = objects;
            if ([objects isFirstResponder]) {
                [theTextField resignFirstResponder];
            }
        } 
    }
}
 15
Author: Mr H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-26 08:14:05

Jest to dobre ogólne rozwiązanie:

Objective-C:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];    
}

Swift:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.view.endEditing(true)
}

Na podstawie rozwiązania @icodebuster: https://stackoverflow.com/a/18756253/417652

 13
Author: eduludi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:26

Myślę, że najłatwiejszym (i najlepszym) sposobem, aby to zrobić, jest podklasowanie widoku globalnego i użycie metody hitTest:withEvent do odsłuchania dowolnego dotyku. Dotknięcia klawiatury nie są rejestrowane, więc hitTest: withEvent jest wywoływany tylko wtedy, gdy dotknij/przewiń/przesuń/uszczypnij... gdzie indziej, to zadzwoń [self endEditing:YES].

Jest to lepsze niż używanie touchesBegan, ponieważ touchesBegan nie są wywoływane po kliknięciu przycisku na górze widoku. Jest lepszy niż UITapGestureRecognizer, które nie rozpoznają na przykład gestu przewijania. Jest to również lepsze niż korzystanie z przyciemnionego ekranu, ponieważ w złożonym i dynamicznym interfejsie użytkownika nie można umieścić przyciemnionego ekranu wszędzie. Co więcej, nie blokuje innych akcji, nie musisz stukać dwukrotnie, aby wybrać przycisk na zewnątrz (jak w przypadku UIPopover).

Jest to również lepsze niż wywołanie [textField resignFirstResponder], ponieważ możesz mieć wiele pól tekstowych na ekranie, więc działa to dla wszystkich z nich.

 10
Author: Enzo Tran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-01 07:24:00

Swift 4

Skonfiguruj swoje {[2] } z tą metodą rozszerzenia raz np. w viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()
    self.setupHideKeyboardOnTap()
}

I klawiatura zostanie odrzucona nawet przez dotknięcie NavigationBar.

import UIKit
extension UIViewController {
    /// Call this once to dismiss open keyboards by tapping anywhere in the view controller
    func setupHideKeyboardOnTap() {
        self.view.addGestureRecognizer(self.endEditingRecognizer())
        self.navigationController?.navigationBar.addGestureRecognizer(self.endEditingRecognizer())
    }

    /// Dismisses the keyboard from self.view
    private func endEditingRecognizer() -> UIGestureRecognizer {
        let tap = UITapGestureRecognizer(target: self.view, action: #selector(self.view.endEditing(_:)))
        tap.cancelsTouchesInView = false
        return tap
    }
}
 8
Author: FBente,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-26 13:09:04

Możesz to zrobić za pomocą storyboardu w XCode 6 i wyżej:


Tworzenie akcji ukrywania Klawiatury

Dodaj to do pliku nagłówkowego klasy używanej przez kontroler ViewController:

@interface TimeDelayViewController : UIViewController <UITextFieldDelegate>

- (IBAction)dissmissKeyboardOnTap:(id)sender;

@end

Następnie dodaj to do pliku implementacji tego samego kontrolera ViewController:

- (IBAction)dissmissKeyboardOnTap:(id)sender{
    [[self view]endEditing:YES];
}

Będzie to teraz jedna z "otrzymanych akcji" dla sceny storyboardu (tj. ViewController):

Tutaj wpisz opis obrazka


Podłącz akcję do Zdarzenie użytkownika

Teraz musisz podłączyć tę akcję do gestu użytkownika dotykania klawiatury.

Ważne - musisz przekonwertować 'UIView', który jest zawarty w Twoim storyboardzie na UIControl , aby mógł odbierać zdarzenia. Wybierz widok z hierarchii sceny kontrolera widoku:

Tutaj wpisz opis obrazka

...i zmień jego klasę:

Tutaj wpisz opis obrazka

Teraz przeciągnij z małego kółka obok "otrzymanej akcji" dla swojej sceny, na "pustą" część sceny(w rzeczywistości przeciągasz "otrzymaną akcję" do UIControl). Zostanie wyświetlony wybór zdarzeń, do których możesz podłączyć swoją akcję:

Tutaj wpisz opis obrazka

Wybierz opcję "Dotknij w środku". Teraz podłączyłeś utworzoną akcję IBAction do akcji użytkownika polegającej na dotknięciu klawiatury. Kiedy użytkownik stuknie klawiaturę, będzie ona teraz ukryta.

(uwaga: aby zaczepić akcję do zdarzenia, Możesz również przeciągnąć z otrzymanego akcja bezpośrednio na UIControl w hierarchii kontrolerów widoku. Jest wyświetlany jako "kontrola" w hierarchii.)

 6
Author: Chris Halcrow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-16 01:47:40

To musi być najprostszy sposób, aby ukryć klawiaturę dotykając na zewnątrz:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.view endEditing:YES];    
}

(z Jak wyłączyć klawiaturę, gdy użytkownik dotknie innego obszaru poza textfield?)

 6
Author: Maggie Phillips,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:38

Jeśli dobrze zrozumiałem, chcesz zrezygnować z klawiatury wile stukając na zewnątrz textfield, ale nie masz odniesienia do swojego textfield.

Try this;

  • Weź globalne pole tekstowe, nazwijmy je reftextField
  • Teraz w textFieldDidBeginEditing Ustaw pole tekstowe odniesienia na

    - (void) textFieldDidBeginEditing:(UITextField *)textField{
        reftextField = textField;
    }
    
  • Teraz możesz z przyjemnością używać na dowolnym zegarze przycisku (dodanie przezroczystego przycisku na początek edycji)

    - (void)dismissKeyboard {
          [reftextField resignFirstResponder];
    }
    
  • Lub za rezygnację z wykonanego przycisku spróbuj to.

    //for resigning on done button    
    - (BOOL) textFieldShouldReturn:(UITextField *)textField{
        [textField resignFirstResponder];
        return YES;
    }
    
 5
Author: rptwsthi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-01 14:51:31

Jeśli widok jest w ogóle osadzony w UIScrollView, możesz użyć następującego:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

Pierwszy animuje klawiaturę poza ekranem, gdy widok tabeli jest przewijany, a później ukryje klawiaturę, jak aplikacja stock Messages.

Zauważ, że są one dostępne na iOS 7.0 lub nowszym.

 4
Author: Joe Masilotti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-14 13:11:53

Aby dodać do listy tutaj moją wersję jak wyłączyć klawiaturę na dotyku zewnętrznym.

ViewDidLoad:

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:singleTap];

Anywhere:

-(void)handleSingleTap:(UITapGestureRecognizer *)sender{
    [textFieldName resignFirstResponder];
    puts("Dismissed the keyboard");
}
 3
Author: John Riselvato,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-17 00:50:28

Mnóstwo świetnych odpowiedzi na temat używania UITapGestureRecognizer -- wszystkie z nich break UITextField's clear (X) button. Rozwiązanie polega na zablokowaniu rozpoznawania gestów poprzez jego delegata:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
    BOOL touchViewIsButton = [touch.view isKindOfClass:[UIButton class]];
    BOOL touchSuperviewIsTextField = [[touch.view superview] isKindOfClass:[UITextField class]];
    return !(touchViewIsButton && touchSuperviewIsTextField);
}
Nie jest to najbardziej wytrzymałe rozwiązanie, ale działa dla mnie.
 3
Author: skedastik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 03:59:57

Możesz utworzyć kategorię dla UiView i nadpisać touchesBegan meathod w następujący sposób.

Dla mnie działa dobrze.I jest to scentralizowane rozwiązanie tego problemu.
#import "UIView+Keyboard.h"
@implementation UIView(Keyboard)

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.window endEditing:true];
    [super touchesBegan:touches withEvent:event];
}
@end
 3
Author: Hiren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 09:12:52

Szybka wersja odpowiedzi @Jensen2k:

let gestureRecognizer : UITapGestureRecognizer = UITapGestureRecognizer.init(target: self, action: "dismissKeyboard")
self.view.addGestureRecognizer(gestureRecognizer)

func dismissKeyboard() {
    aTextField.resignFirstResponder()
}

One liner

self.view.addTapGesture(UITapGestureRecognizer.init(target: self, action: "endEditing:"))
 3
Author: Syed Asad Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-17 05:38:47

Użyłem przykładu Barry ' ego do mojego nowego rozwoju. Zadziałało świetnie! ale musiałem dodać trochę zmiany, wymagane, aby zwolnić klawiaturę tylko dla pola tekstowego jest edytowany.

Więc dodałem do przykładu następujące:

- (void) textFieldDidBeginEditing:(UITextField *)textField
{
    _textBeingEdited = textField;
}
-(void) textFieldDidEndEditing:(UITextField *)textField
{
    _textBeingEdited = nil;
}

Również zmieniłem metodę hideKeyboard w następujący sposób:

- (IBAction)hideKeyboard:(id)sender
{
    // Just call resignFirstResponder on all UITextFields and UITextViews in this VC
    // Why? Because it works and checking which one was last active gets messy.
    //UITextField * tf = (UITextField *) sender;
    [_textBeingEdited resignFirstResponder];
}
 2
Author: mtorre,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-18 23:01:45

Jednym z najprostszych i najkrótszych sposobów jest dodanie tego kodu do twojego viewDidLoad

[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc]
                                     initWithTarget:self.view
                                     action:@selector(endEditing:)]];
 2
Author: Sudhin Davis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-07 07:45:43

Swift 4 oneliner

view.addGestureRecognizer(UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing(_:))))
 2
Author: newDeveloper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-01 03:13:53

Wyślij wiadomość resignFirstResponder do tekstu, który ją tam umieścił. Proszę zobacz ten post aby uzyskać więcej informacji.

 1
Author: Ke Sun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:44

To działa

W tym przykładzie aTextField jest jedynym UITextField.... Jeśli są inne lub UITextViews, jest trochę więcej do zrobienia.

// YourViewController.h
// ...
@interface YourViewController : UIViewController /* some subclass of UIViewController */ <UITextFieldDelegate> // <-- add this protocol
// ...
@end

// YourViewController.m

@interface YourViewController ()
@property (nonatomic, strong, readonly) UITapGestureRecognizer *singleTapRecognizer;
@end
// ...

@implementation
@synthesize singleTapRecognizer = _singleTapRecognizer;
// ...

- (void)viewDidLoad
{
    [super viewDidLoad];
    // your other init code here
    [self.view addGestureRecognizer:self.singleTapRecognizer];

{

- (UITapGestureRecognizer *)singleTapRecognizer
{
    if (nil == _singleTapRecognizer) {
        _singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapToDismissKeyboard:)];
        _singleTapRecognizer.cancelsTouchesInView = NO; // absolutely required, otherwise "tap" eats events.
    }
    return _singleTapRecognizer;
}

// Something inside this VC's view was tapped (except the navbar/toolbar)
- (void)singleTapToDismissKeyboard:(UITapGestureRecognizer *)sender
{
    NSLog(@"singleTap");
    [self hideKeyboard:sender];
}

// When the "Return" key is pressed on the on-screen keyboard, hide the keyboard.
// for protocol UITextFieldDelegate
- (BOOL)textFieldShouldReturn:(UITextField*)textField
{
    NSLog(@"Return pressed");
    [self hideKeyboard:textField];
    return YES;
}

- (IBAction)hideKeyboard:(id)sender
{
    // Just call resignFirstResponder on all UITextFields and UITextViews in this VC
    // Why? Because it works and checking which one was last active gets messy.
    [aTextField resignFirstResponder];
    NSLog(@"keyboard hidden");
}
 1
Author: Barry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-11 11:55:50

Próbowałem wielu odpowiedzi tutaj i nie miałem szczęścia. Mój rozpoznawacz gestów tap zawsze powodował, że moje UIButtons nie reagowały po dotknięciu, nawet gdy ustawiłem właściwość cancelsTouchesInView rozpoznawacza gestów na nie.

Oto, co ostatecznie rozwiązało problem:

Mieć ivar:

UITapGestureRecognizer *_keyboardDismissGestureRecognizer;

Gdy pole tekstowe rozpoczyna edycję, Ustaw rozpoznawanie gestów:

- (void) textFieldDidBeginEditing:(UITextField *)textField
{
    if(_keyboardDismissGestureRecognizer == nil)
    {
        _keyboardDismissGestureRecognizer = [[[UITapGestureRecognizer alloc]
                                       initWithTarget:self
                                       action:@selector(dismissKeyboard)] autorelease];
        _keyboardDismissGestureRecognizer.cancelsTouchesInView = NO;

        [self.view addGestureRecognizer:_keyboardDismissGestureRecognizer];
    }
}

Wtedy sztuczka polega na tym, jak skonfigurować metodę dismissskeyboard:

- (void) dismissKeyboard
{
    [self performSelector:@selector(dismissKeyboardSelector) withObject:nil afterDelay:0.01];
}

- (void) dismissKeyboardSelector
{
    [self.view endEditing:YES];

    [self.view removeGestureRecognizer:_keyboardDismissGestureRecognizer];
    _keyboardDismissGestureRecognizer = nil;
}

Chyba jest po prostu coś w tym, żeby usunąć ze stosu Touch handling executionation executionation executionation executionation executionation executionation...

 1
Author: user1021430,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-14 21:07:33
- (void)viewDidLoad
{
    [super viewDidLoad]; 

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                                                          initWithTarget:self
                                                          action:@selector(handleSingleTap:)];
    [singleTapGestureRecognizer setNumberOfTapsRequired:1];
    [singleTapGestureRecognizer requireGestureRecognizerToFail:singleTapGestureRecognizer];

    [self.view addGestureRecognizer:singleTapGestureRecognizer];
}

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer
{
    [self.view endEditing:YES];
    [textField resignFirstResponder];
    [scrollView setContentOffset:CGPointMake(0, -40) animated:YES];

}
 1
Author: Gaurav Gilani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-19 07:01:41

Dodaj ten kod do swojego kontrolera widoku .m Plik:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
}
 1
Author: aashish tamsya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-17 11:35:02
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

    if let touch = touches.first{
     view.endEditing(true)

     }
}
 1
Author: Phani Sai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 06:10:12

W tym przypadku można użyć ScrollView i dodać do TextField w ScrollView i chcę nacisnąć ScrollView i widok, a następnie zamknąć klawiaturę. Próbowałem stworzyć przykładowy kod na wszelki wypadek. Jak to,

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var textField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.tap(_:)))
        view.addGestureRecognizer(tapGesture)
        // Do any additional setup after loading the view, typically from a nib.
    }
    func tap(gesture: UITapGestureRecognizer) {
        textField.resignFirstResponder()
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

Twój Storyboard spójrz na to tak samo.

Tutaj wpisz opis obrazka

 1
Author: Ravi Dhorajiya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-04 14:16:58

Możesz użyć metody uitapgesturerecongnizer do oddalania klawiatury, klikając poza UITextField. Przy użyciu tej metody za każdym razem, gdy użytkownik kliknie poza UITextField, klawiatura zostanie odrzucona. Poniżej znajduje się fragment kodu do korzystania z niego.

 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
                                   initWithTarget:self
                                   action:@selector(dismissk)];

    [self.view addGestureRecognizer:tap];


//Method
- (void) dismissk
{
    [abctextfield resignFirstResponder];
    [deftextfield resignFirstResponder];

}
 1
Author: Nirzar Gandhi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-16 09:58:53
  • Ustaw pole tekstowe delegate w widoku did load:

    override func viewDidLoad() 
    {
      super.viewDidLoad()
      self.userText.delegate = self
    }
    
  • Dodaj tę funkcję:

    func textFieldShouldReturn(userText: UITextField!) -> Bool 
    {
     userText.resignFirstResponder()
     return true;
    }
    
 1
Author: seggy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-06 11:06:18