iOS - Відхилення клавіатури при натисканні за межами UITextField


461

Мені цікаво, як змусити клавіатуру зникати, коли користувач торкається поза "a" UITextField.


8
Дмитро мав правильну відповідь. Це не проблема жестів - це проблема відставки першого відповідача. Відповідь Дмирті - це також рішення, рекомендоване Mark, Nutting та LeMarche для початку розробки iOS 4 , глава 4, сторінка 83.
jww

Відповіді:


760

Вам потрібно буде додати UITapGestureRecogniserта призначити його перегляду, а потім зателефонувати подати першу відповідь у відповідь UITextFieldна селекторі.

Код:

У переглядіDidLoad

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

[self.view addGestureRecognizer:tap];

У відхиленніKeyboard:

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

(Де aTextFieldзнаходиться текстове поле, яке відповідає за клавіатуру)

Версія Swift 3 виглядає так

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

Для відставкиKeyboard

func dismissKeyboard (_ sender: UITapGestureRecognizer) {
    aTextField.resignFirstResponder()
}

6
Це працює, але те, що він робить, це також вимикає або робить кнопки панелі навігації як нерозбірливі. То чи існує для цього робота?
Parth Bhatt

137
Я думаю, що краще, ніж це [aTextField resignFirstResponder]було б [self.view endEditing:YES];, не потрібно посилання на текстове поле, і він працюватиме для кількох текстових полів
Julian Król

90
Тож без необхідності визначати будь-які методи, однолінійним буде:[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self.view action:@selector(endEditing:)]];
Subhas

8
@ParthBhatt я додав відповідь [tap setCancelsTouchesInView:NO];на @qiaoyi; У мене виникла проблема з таблицею, яка не відповідає на вибір рядків. Через 5 років я сподіваюся, що це допоможе комусь іншому.
Том Говард

7
Швидкий однолінійний: self.view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
Несправність

176

Я пюре кілька відповідей.

Використовуйте ivar, який ініціалізується протягом viewDidLoad:

UIGestureRecognizer *tapper;

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

Скасувати те, що зараз редагується:

- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
    [self.view endEditing:YES];
}

Фантастичний, він працює на UITableView !! це врятує мені день! Як бічну примітку я буду використовувати [UITextField resignFirstResponder] замість [UIView endEditing:], оскільки у мене більше UITextField, а endEditing дає неправильну позицію прокрутки, навіть якщо видно нове UITextField.
Dr.Luiji

1
Мертві помиляються, оскільки UITapGestureRecognizer ніколи не додається до перегляду!

1
Яка мета відміниTouchesInView тут?
Адам Джонс

3
Якщо ви не додасте тут cancellsTouchesInView = false, ви не зможете вибрати інші типи елементів у своєму поданні. Ваші крани будуть перехоплені розпізнавачем жестів.
HalR

104

Перевірте це, це був би найпростіший спосіб зробити це,

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

Або

Ця бібліотека буде обробляти, включаючи автоматичну прокрутку панелі прокрутки, торкніться місця, щоб приховати клавіатуру тощо.

https://github.com/michaeltyson/TPKeyboardAvoiding


@Ramesh так, але це не так. вам потрібно створити підклас з UITableView і всередині цього класу реалізувати метод touchesBegan, а потім викликати метод endEditing. це працює! не забудьте встановити клас для вашої таблиці в ниві з новоствореним класом.
Prasad De Zoysa

3
Він не приховує клавіатуру, коли користувач торкається інших елементів керування. Наприклад: У мене є UIButton та UITextField в UIView. Я натискаю на UITextField, потім натискаю кнопку, клавіатура в цьому випадку не ховається.
Гребля Якова

2
@JacobDam Ви маєте рацію. Мета полягає у тому, щоб подати у відставку перший відповідь, щоб приховати клавіатуру, якщо щось відбувається поза aTextField.

88

Я бачу, що у деяких людей виникають проблеми із використанням UITapGestureRecognizerметоду. Найпростіший спосіб, коли я виконав цю функціональність, залишаючи недоторканою поведінку моєї існуючої кнопки, - додавати лише один рядок до відповіді @ Jensen2k:

[tap setCancelsTouchesInView:NO];

Це дозволило моїм існуючим кнопкам все ще працювати, не використовуючи метод @Dmitry Sitnikov.

Про це propertyчитайте тут (шукайте CancelsTouchesInView): Довідка про клас UIGestureRecognizer

Я не впевнений, як це буде працювати з смугами прокрутки, як я бачу, у деяких були проблеми, але, сподіваюся, хтось інший може зіткнутися з тим же сценарієм, що і я.


3
Я також хотів би додати, для тих, хто має фонове зображення в задній частині зображення, використовуючи UIImageView, додавати, [imageView setUserInteractionEnabled:NO];і ви "клацніть" по ньому, завдяки чому цей метод працює.
Пол Пілін

55

Краще зробити свій UIViewпримірник UIControl(в інтерфейсі), а потім підключити їх TouchUpInsideподію до dismissKeyboardметоду. Цей IBActionспосіб виглядатиме так:

- (IBAction)dismissKeyboard:(id)sender {
    [aTextBox resignFirstResponder];
}

1
Дякую! Це працювало для мене, а інших рішень не робило. ( UITapGestureRecognizerперешкоджає натисканням на кнопки всередині подання). touchesEndedне працювало, тому що сталося UIScrollViewвозитися з ланцюжком реагування.)
jlstrecker

1
Це чудово працює, але його потрібно додати до всього, що ви хочете відхилити клавіатуру. Чи є спосіб автоматично подати у відповідь текстовому полі першу відповідь, коли натиснути щось інше?
Ісаак Оверкер

4
Вам не потрібно робити UIView UIControl. Переконайтесь, що UIView увімкнено взаємодію користувачів.
ТОВ «Софійське ПЗ»

1
@SofiSoftwareLLC Ваша пропозиція не працювала для мене. Мені довелося зробити його UIControl, навіть коли було встановлено прапорець Взаємодія користувача.
три кубки

1
Використовуючи StoryBoard, я змінив UIView на UIControl (де я вибрав би підклас UIView, якби створив його). Це добре працює. Я не стикався з жодними проблемами. iOS8.
ToddB

30

Швидкий 4

Налаштуйте свій за UIViewControllerдопомогою цього методу розширення один раз, наприклад, у viewDidLoad:

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

а клавіатура буде відхилена навіть натисканням на 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
    }
}

2
Брат, ти прибив це !! Ця відповідь ідеальна і працює справді чудово, дуже дякую.
іржа

28

Швидка версія, це працює в поєднанні з іншими елементами (наприклад, тими UIButtonчи іншими UITextField):

override func viewDidLoad() {
    super.viewDidLoad()

    let tapper = UITapGestureRecognizer(target: self, action:#selector(endEditing))
    tapper.cancelsTouchesInView = false
    view.addGestureRecognizer(tapper)
}

1
ціль повинна бути, selfа неself.view
EI Captain v2.0

1
ціллю повинен бути самоперегляд. В іншому випадку вищезгаданий код вийде з ладу.
Naga Mallesh Maddali

canclesTouchesInView- зручна власність. Дякую.
JonSlowCN

Старі звички важко вмирають. Що робить ця крапка з комою? ;)
Олександр Г.

@AlexandreG. Дійсно, тим більше, що я взагалі кодую c#. FYI Цей крапку з комою дозволено в синтаксисі, просто не потрібно.
Роб

17

Як щодо цього: я знаю, що це стара публікація. Це може комусь допомогти :)

- (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];
            }
        } 
    }
}

Я не перевіряв UITextField, тому він працює для будь-якого типу введення. Не бачачи жодної проблеми.
Френк

15

Це хороше загальне рішення:

Завдання-C:

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

Швидкий:

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

На основі рішення @icodebuster: https://stackoverflow.com/a/18756253/417652



10

Я думаю, що найпростіший (і найкращий) спосіб зробити це підкласифікувати свій глобальний погляд і використовувати hitTest:withEventметод для прослуховування будь-якого дотику. Дотики до клавіатури не реєструються, тому hitTest: withEvent викликається лише тоді, коли ви торкаєтесь / прокручуєте / проведіть пальцем / щіпкою ... десь ще, а потім дзвоніть [self endEditing:YES].

Це краще, ніж використовувати, touchesBeganтому що touchesBeganне викликаються, якщо натиснути кнопку вгорі подання. Це краще, ніж те, UITapGestureRecognizerщо не вдається розпізнати жест прокрутки, наприклад. Це також краще, ніж використовувати тьмяний екран, оскільки в складному та динамічному користувальницькому інтерфейсі ви не можете розміщувати тьмяний екран скрізь. Більше того, це не блокує інших дій, вам не потрібно натискати двічі, щоб вибрати кнопку зовні (як у випадку з aUIPopover ).

Крім того, це краще, ніж дзвонити [textField resignFirstResponder], тому що у вас може бути багато текстових полів на екрані, тому це працює для всіх.


На жаль, це, здається, заважає "X" UISearchBar для очищення тексту.
huggie

1
є певні проблеми з таким підходом. наприклад, ви не можете прокручувати перегляд прокрутки, не втрачаючи фокусу на текстовому полі. не рекомендується для складніших сценаріїв ... особисто я віддаю перевагу версію uicontrol від Дмитра, можливо, подовжену програмою Sofi Software.
katzenhut

Один із прикладів прокрутки - це програма електронної пошти, коли ви вводите в рядок пошуку, а потім прокручуєте список пошти, клавіатура відхиляється.
Енцо Тран

Це найкращий підхід і зроблено для моїх інших проектів.
Чандрамані


6

Якщо вигляд взагалі вбудований у UIScrollViewто, ви можете скористатися наступним:

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

Перший буде анімувати клавіатуру з екрану, коли прокручується подання таблиці, а пізніше приховає клавіатуру, як додаток Повідомлення про запас.

Зауважте, що вони доступні на iOS 7.0 або вище.


6

Зробити це можна за допомогою дошки розкадри в XCode 6 і вище:


Створіть дію, щоб приховати клавіатуру

Додайте це до файлу заголовка класу, який використовує ваш ViewController:

@interface TimeDelayViewController : UIViewController <UITextFieldDelegate>

- (IBAction)dissmissKeyboardOnTap:(id)sender;

@end

Потім додайте це до файлу реалізації того ж ViewController:

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

Тепер це буде однією з "Отриманих дій" для вашої сцени розкадровки (тобто ViewController):

введіть тут опис зображення


Підключіть дію до події користувача

Тепер вам потрібно підключити цю дію до того, щоб користувач жестом торкнувся клавіатури.

Важливо - Вам потрібно перетворити "UIView", який міститься у вашій дошці даних , в UIControl , щоб він міг отримувати події. Виберіть подання з ієрархії сцен контролера перегляду:

введіть тут опис зображення

... і змінити свій клас:

введіть тут опис зображення

Тепер перетягніть з невеликого кола поруч із "отриманою дією" для вашої сцени на "порожню" частину сцени (насправді ви перетягуєте "Отриману дію" до UIControl). Вам буде показаний вибір подій, на які ви можете підключити свою дію:

введіть тут опис зображення

Виберіть варіант "торкніться всередині". Тепер ви підключили створений вами ІБА до дії користувача про торкання клавіатури. Коли користувач натискає клавіатуру, вона тепер буде прихована.

(ПРИМІТКА. Щоб підключити дію до події, ви також можете перетягнути з отриманої дії безпосередньо на UIControl в ієрархії перегляду контролерів. Це відображається як "Керування" в ієрархії.)


Дякуємо за рішення та детальне пояснення. Мені дуже корисно.
Yongxiang Ruan

5

Якщо я маю право, ви хочете відмовитись від хитрого натискання клавіатури на сторону, textfieldале у вас немає посилання на вашу textfield.

Спробуйте це;

  • Візьміть глобальне текстове поле, дайте йому можливість зателефонувати reftextField
  • Тепер у textFieldDidBeginEditingвстановленому посилається текстовому полі на

    - (void) textFieldDidBeginEditing:(UITextField *)textField{
        reftextField = textField;
    }
  • Тепер ви можете із задоволенням користуватися будь-якою кнопкою годинника ((додавши прозору кнопку для початку редагування рекомендується)

    - (void)dismissKeyboard {
          [reftextField resignFirstResponder];
    }
  • Або для відставки готової кнопки спробуйте це.

    //for resigning on done button    
    - (BOOL) textFieldShouldReturn:(UITextField *)textField{
        [textField resignFirstResponder];
        return YES;
    }

3

Просто для додання сюди моєї версії про те, як відмовити клавіатуру від зовнішнього дотику.

viewDidLoad:

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

У будь-якому місці:

-(void)handleSingleTap:(UITapGestureRecognizer *)sender{
    [textFieldName resignFirstResponder];
    puts("Dismissed the keyboard");
}

3

Тут є безліч чудових відповідей щодо використання - UITapGestureRecognizerвсієї UITextFieldчіткої кнопки (X). Рішення полягає в придушенні розпізнавача жестів через його делегата:

- (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);
}

Це не найбільш надійне рішення, але воно працює для мене.


Точно все вищезгадане не вдається, якщо я натисніть в одному текстовому полі. Він подає у відставку, навіть текстове поле - мій відповідь. і він також закриває клавіатуру , натиснувши кнопку Очистити всередині TextField
Mrug

Я б спростити його просто робити тест на кнопку: return !touchViewIsButton. Я думаю, будь-які інші кнопки, які потрібно відхилити клавіатуру, повинні робити це у своїх діях. Крім того, TouchUpInside може не зателефонувати, коли зміниться макет відхилення клавіатури.
Marián Černý

3

Ви можете створити категорію для UiView і змінити сенсорний метод.

Це добре працює для мене. І це централізоване вирішення цієї проблеми.

#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

Швидка версія відповіді @ Jensen2k:

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

func dismissKeyboard() {
    aTextField.resignFirstResponder()
}

Один лайнер

self.view.addTapGesture(UITapGestureRecognizer.init(target: self, action: "endEditing:"))

2

Я використовував приклад Баррі для своєї нової розробки. Це спрацювало чудово! але мені довелося включити трохи зміни, необхідні для відхилення клавіатури лише для редагуваного текстового поля.

Отже, я додав до прикладу Баррі наступне:

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

Також я змінив метод hidKeyboard наступним чином:

- (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

Один з найпростіших і найкоротших способів - додати цей код до свого viewDidLoad

[self.view addGestureRecognizer:[[UITapGestureRecognizer alloc]
                                     initWithTarget:self.view
                                     action:@selector(endEditing:)]];

2
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {

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

     }
}

2

Я спробував багато відповідей тут і не пощастило. Мій розпізнавальний жест натискання завжди змушував мене UIButtonsне реагувати при натисканні , навіть коли я встановлювавcancelsTouchesInView властивість розпізнавача жестів на НІ.

Ось що врешті-решт вирішило питання:

Майте івар:

UITapGestureRecognizer *_keyboardDismissGestureRecognizer;

Коли текстове поле починає редагувати, встановіть розпізнавальник жестів:

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

        [self.view addGestureRecognizer:_keyboardDismissGestureRecognizer];
    }
}

Тоді хитрість полягає в тому, як ви налаштували dismissKeyboardметод:

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

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

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

Я думаю, що є щось про те, як dismissKeyboardSelectorвиконати виконання із стеку виконання дотиків, що керують ...



1

Це працює

У цьому прикладі aTextField - єдиний UITextField .... Якщо є інші або UITextViews, є ще трохи зробити.

// 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
- (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

Додайте цей код у файл ViewController.m :

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

1

У цьому випадку можна використовувати ScrollView та додати його до TextFieldScrollView, і я хочу Торкнутись ScrollViewі Переглянути, а потім відхилити клавіатуру. Я намагався створити зразок коду на всякий випадок. Подобається це,

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.
    }
}

Ваша розговорка. Подивіться на це так само.

введіть тут опис зображення


1

Ви можете використовувати метод UITapGestureRecongnizer для відхилення клавіатури, клацнувши поза межами UITextField. За допомогою цього методу кожен раз, коли користувач натисне за межі UITextField, тоді клавіатура отримає відхилення. Нижче наведено фрагмент коду для його використання.

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

    [self.view addGestureRecognizer:tap];


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

}

1
  • Встановити делегат текстових полів з урахуванням завантаження:

    override func viewDidLoad() 
    {
      super.viewDidLoad()
      self.userText.delegate = self
    }
  • Додайте цю функцію:

    func textFieldShouldReturn(userText: UITextField!) -> Bool 
    {
     userText.resignFirstResponder()
     return true;
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.