Как уйти в отставку первого респондента из текстового поля, когда пользователь нажимает в другом месте? - PullRequest
24 голосов
/ 17 октября 2011

Я заполнил свой вид ScrollView (такого же размера, как и вид), и я застрял в том, как уйти в отставку первому респонденту, когда пользователь нажал в другом месте в представлении (или в виде прокрутки).Есть идеи, как это сделать?Я использую следующий метод, но он не работает должным образом:

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}

Спасибо за помощь,

Стефан

Ответы [ 17 ]

0 голосов
/ 04 октября 2016

Обновление

Я нашел другой простой способ

, просто объявив свойство: -

@property( strong , nonatomic) UITextfield *currentTextfield;

и Gecognizer жеста касания: -

@property (strong , nonatomic) UITapGestureRecognizer *resignTextField;

В ViewDidLoad

_currentTextfield=[[UITextField alloc]init];
_resignTextField=[[UITapGestureRecognizer alloc]initWithTarget:@selector(tapMethod:)];

[self.view addGestureRecognizer:_resignTextField];

Реализация метода делегата текстового поля didBeginEditing

 -(void)textFieldDidBeginEditing:(UITextField *)textField{


      _currentTextfield=textField;

    }

РеализацияВаш метод жестов касания (_resignTextField)

 -(void)tapMethod:(UITapGestureRecognizer *)Gesture{

     [_currentTextfield resignFirstResponder];

 }
0 голосов
/ 03 июля 2015

Это самый простой способ, который я нашел, который работает последовательно. Просто добавьте распознаватель жестов касания к виду, и все готово.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

[self.view endEditing:YES];

}

0 голосов
/ 26 июля 2014

Это то, что я делаю ...

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideAllKeyboards)];
tapGesture.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapGesture];

-(void) hideAllKeyboards {
    [textField_1 resignFirstResponder];
    [textField_2 resignFirstResponder];
    [textField_3 resignFirstResponder];
    .
    .
    .
    [textField_N resignFirstResponder];
}
0 голосов
/ 08 октября 2013

Для моей реализации [self.view endEditing: YES] не работало.

Чтобы окончательно убедиться, что клавиатура скрыта, мне пришлось сделать один из моих просмотров первым респондентом, а затем немедленно заставить его подать в отставку, как показано ниже:

-(void) hideKeyboardPlease{
   [uiTextTo becomeFirstResponder];
   [uiTextTo resignFirstResponder];
}
0 голосов
/ 25 мая 2013

Создайте свой IBOutlet в файле ViewController.h, как показано ниже:

//YOUR ViewController.h FILE

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
{
    //WIRE THIS WITH YOUR UITextField OBJECT AT YOUR .xib FILE
    IBOutlet UITextField *yourIBOutletUITextField;
}

@end

Добавьте это в свой файл ViewController.m:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     [yourIBOutletUITextField resignFirstResponder];
}

как показано ниже:

//YOUR ViewController.m FILE

#import "ViewController.h"

@implementation ViewController


//ADD THIS METHOD BELOW
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
     [yourIBOutletUITextField resignFirstResponder];
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    }

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end
0 голосов
/ 23 мая 2013

Когда это возможно, лучше всего сделать так, чтобы UIView вместо этого наследовал от UIButton .

Вам просто нужно изменить его в Интерфейсном Разработчике, и сразу же вы получите возможность создать Действие «Подправить внутри», как и любую другую кнопку.

Ваш вид будет работать как обычно, потому что UIButton все еще является видом, но вы получите уведомление, когда кто-то нажмет на вид.Там вы можете позвонить

[self.view endEditing:YES];

, чтобы уволить любую клавиатуру.

Обратите внимание, что, если вы просматриваете UIScrollView, это решение не для вас.

0 голосов
/ 17 октября 2011

Создайте большую кнопку за всем этим, и обратный вызов кнопки вызывает resignFirstResponder для каждого вашего входа.Просто убедитесь, что все, с чем пользователь взаимодействует, находится сверху кнопки.

Конечно, кнопка будет произвольной и прозрачной.

Я хотел бы рассмотреть реализацию IBOutletCollection, называемой resignables, и установить каждый вход в эту коллекцию.И обратный вызов кнопки перебирает эту коллекцию, вызывая resignFirstResponder для всех них.

Редактировать: если это вид прокрутки большого размера, не забудьте правильно установить маркеры изменения размера в параметре вида кнопки, чтобы кнопка всегда расширялась и сжималась до высоты и ширины вида прокрутки

...