Как я могу отклонить клавиатуру, когда я просто коснусь где-нибудь, кроме UITextField?
Здравствуйте, у меня есть два UITextFields в моем приложении, и я хочу отклонить клавиатуру, когда я просто касаюсь где-нибудь, кроме UITextFields, как я могу это сделать?
10 ответов
Используйте метод tochesBegin для этой цели
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[yourFirstTextField resignFirstResponder];
[yourSecondTextField resignFirstResponder];
}
Вам больше ничего не нужно. Когда вы дотрагиваетесь до любого места на экране, то оба текстовых поля уходят в отставку, вам не нужно знать, какой из них имеет фокус. И когда вы дотрагиваетесь до текстового поля, тогда текстовое поле открывает клавиатуру самостоятельно.
Ответ Ишу хороший. Но я думаю, что вы также должны попробовать:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
Как правило, в этом сценарии у вас будет представление прокрутки, содержащее остальную часть пользовательского интерфейса. Если вы назначаете делегата этого представления прокрутки вашему контроллеру представления и говорите, что реализуете протокол UIScrollViewDelegate
затем просто добавьте следующий метод:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
[self.view endEditing:YES];
}
Вам нужно создать пользовательскую кнопку на фоне, а затем подключить ее к IBAction
метод, который вызывает resignFirstResponder
на вашем UITextField
что-то вроде этого
Редактировать:
как вы хотите добавить кнопку программно, чем вы можете использовать этот код
- (void)viewDidLoad
{
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
button.buttonType = UIButtonTypeCustom;
[button addTarget:self action:(buttonPressed) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
[button release];
и затем добавьте свой код контроллера после этого.
Использовать делегата,
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
Вы также можете создать метод в вашем контроллере
-(IBAction)editingEnded:(id)sender{
[sender resignFirstResponder];
}
а затем в инспекторе подключений в IB подключите к нему событие "Did End On Exit".
Создайте невидимую кнопку, поместите ее за UITextField
и отправить resignFirstResponder
сообщение в текстовые поля, когда кнопка нажата.
Если вы не используете Интерфейсный конструктор, вы можете вручную подключить события, как описано здесь: Как я могу программно связать UIView или UIImageView с событием типа "touch up inside"?
Если вы используете конструктор интерфейса, то вам не нужно создавать кнопку фона.
Вы могли бы сделать это:
- Выберите ваш вид (вероятно, называется View)
- Перейдите на вкладку (i) в инспекторе свойств
- Измените класс с UIView на UIControl (это дает вам доступ к событию Touch Down).
- Подключите событие Touch Down к своему методу backgroundTap (Ctrl + перетаскивание).
- Не забудьте сохранить изменения
Использовать этот.
- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
const int movementDistance = 180; distace of keyboard up.
const float movementDuration = 0.3f;
int movement = (up ? -movementDistance : movementDistance);
[UIView beginAnimations: @"anim" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
[UIView commitAnimations];
}
You need to define the action for your button click this way
[infoButton addTarget:self action:@selector(backButtonClicked) forControlEvents:UIControlEventTouchUpInside];
And implement the click method ,as for example i have provided the animation on button click method.
-(void)backButtonClicked
{
[UIView beginAnimations:@"animation" context:nil];
[UIView setAnimationDuration:1.5];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.navigationController.view cache:NO];
[self.navigationController popViewControllerAnimated:YES];
[UIView commitAnimations];
}
Hope this will help you ,the action is without using IB.Its all done through coding
Сохраните ссылку на UITextField в вашем контроллере представления и вызовите [yourTextField resignFirstResponder]