IOS - как скрыть клавиатуру, если пользователь нажимает на случайные элементы, а не фон?
В моем приложении у меня есть что-то вроде этого:
- (IBAction)backgroundTouch:(id)sender
{
[businessDescription resignFirstResponder];
[self.view endEditing:YES];
}
Я не уверен, какая из двух строк, которые я использую, лучше, поэтому я использую обе:). Это работает, когда текстовая область выделена, и пользователь нажимает фон.
Но пользователи не всегда нажимают на фон, а иногда нажимают на другие элементы страницы, например, следующий элемент, который они пытаются заполнить.
В моем снимке экрана у меня есть следующий элемент под текстовой областью, и когда я щелкаю там, клавиатура не скрывается. Может ли кто-нибудь помочь мне скрыть клавиатуру, когда пользователь нажимает на различные элементы страницы и когда текстовая область не выделяется?
Вот мой файл.h:
@interface PlanBusinessController : UIViewController
@property (weak, nonatomic) IBOutlet UITextView *businessDescription;
- (IBAction)submitBusiness:(id)sender;
@property (weak, nonatomic) IBOutlet UIButton *buttonProperty;
@property (weak, nonatomic) IBOutlet UITextField *personName;
@property (weak, nonatomic) IBOutlet UITextField *personEmail;
@property (weak, nonatomic)
IBOutlet UISwitch *privacy;
@property (weak, nonatomic) IBOutlet UISwitch *wantHelp;
- (IBAction)helpToggle:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
@property (weak, nonatomic) IBOutlet UILabel *emailLabel;
@property (weak, nonatomic) IBOutlet
UIButton *test;
@конец
и вот мои.m декларации:
#import "PlanBusinessController.h"
@interface PlanBusinessController ()
@end
@implementation PlanBusinessController
@synthesize nameLabel;
@synthesize emailLabel;
@synthesize businessDescription;
@synthesize buttonProperty;
@synthesize personName;
@synthesize personEmail;
@synthesize privacy;
@synthesize wantHelp;
@synthesize test;
-(void)touchesBegan:(NSSet*)touches
{
UITouch *touch=[touches anyObject];
UIView *view=touch.view;
if (![view isEqual:businessDescription])
{
//[businessDescription resignFirstReponder];
}
}
- (IBAction)backgroundTouch:(id)sender
{
[businessDescription resignFirstResponder];
[self.view endEditing:YES];
}
Спасибо!
3 ответа
Я использую этот метод в моей программе ViewController, и он отлично работает. Я бы попробовал.
//Used with the text fields to dismiss keyboard
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[textField resignFirstResponder];
}
Если у вас есть другие элементы, то в методы для этих элементов также добавьте [textField resignFirstResponder]
,
Например, если они могут нажать на кнопку, напишите что-то вроде этого:
-(IBAction)button1:(id)sender
{
[textField resignFirstResponder];
//Do stuff
}
Примечание. Он нужен для каждого текстового поля, которое вы хотите закрыть. Например:
-(IBAction)button1:(id)sender
{
[textField resignFirstResponder];
[textField2 resignFirstResponder];
[]... etc
//Do stuff
}
Пожалуйста, проверьте код ниже:
-(void)touchesBegan:(NSSet*)touches
{
UITouch *touch = [touches anyObject];
UIView *textView=touch.view;
if (![textView isKindOfClass:[UITextView class]])
{
[businessDescription resignFirstResponder];
}
}
Когда вы прикасаетесь к объекту, он проверяет, является ли UITextView
или нет, если не закончится редактирование.
Легким способом было бы поймать вид, на котором произошло касание. И сравните это с текстовой областью. Если вид или (что-то вроде кнопки) отличается от текстовой области, вы можете скрыть клавиатуру. Вот псевдокод:
-(void)touchesBegan:(NSSet*)touches
{
UITouch *touch=[touches anyObject];
UIView *view=touch.view;
if (![view isEqual:textArea])
[textarea resignFirstReponder];
}