Отказаться от клавиатуры, если пользователь касается UIImageView - PullRequest
0 голосов
/ 08 февраля 2012

Задача

У меня есть файл XIB с UIImageView поверх фона. У меня есть настройка на отставку, когда пользователь касается фона, но я не могу понять, как заставить клавиатуру уйти в отставку, если пользователь касается UIImageView.

Вопрос

Что можно использовать для отставки клавиатуры, если они касаются UIImageView ИЛИ фона?

Настройка

Существует событие для прослушивания касания фона, которое вызывает этот метод

- (IBAction)backgroundTap:(id)sender{
[userPassword resignFirstResponder];
[userLogin resignFirstResponder];    
}

это прекрасно работает, но я не уверен, как связать UIImageView.

Ответы [ 3 ]

1 голос
/ 08 февраля 2012

Вы ищете это:

UITapGestureRecognizer *tapGesture  =[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgroundTap:)];
[tapGesture setDelegate:self];        
[imageView addGestureRecognizer:tapGesture];
1 голос
/ 08 февраля 2012

Добавить жест касания к виду.

В вашем .h:

@interface YourViewController : UIViewController <UIGestureRecognizerDelegate>{
UITapGestureRecognizer *tap;    

}

@property (nonatomic, strong /*if using ARC, if not then use retain*/) UITapGestureRecognizer *tap;

-(void) dismissKeyboard;

Тогда в вашем .m:

@synthesize tap;

//in your viewDidLoad
tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
tap.delegate = self;

-(void) viewWillAppear:(BOOL)animated{

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:self.view.window];

}

-(void) dismissKeyboard {
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.5];
if ([yourImageView isFirstResponder]) {
[yourImageView resignFirstResponder];
}
}

-(void) viewWillDisappear:(BOOL)animated{

[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];

}

Вот как я это сделал.

1 голос
/ 08 февраля 2012

Убедитесь, что взаимодействие с пользователем отключено для UIImageView. Затем касания этого элемента должны быть переданы в базовый вид. Это фактически полностью игнорирует нажатия на изображение.

В качестве альтернативы, если вы хотите захватить касания на изображении по какой-то другой причине, вы можете создать UITapGestureRecognizer для UIImageView, действие которого - ваш backgroundTap метод или какой-либо другой метод. (Возможно, вам придется создать другой метод с соответствующей сигнатурой для использования с распознавателем жестов, но вышеописанный метод может быть вполне подходящим.)

...