Как заставить клавиатуру исчезнуть? - PullRequest
3 голосов
/ 09 августа 2010

У меня есть текстовое поле, отображаемое в UITableViewCell, и я хочу иметь возможность скрыть клавиатуру, когда пользователь прикасается к чему-либо еще на экране, кроме текстового поля.Я знаю о [поле resignFirstResponder]; но я не знаю, как перехватывать прикосновения на фоне UITableView для вызова «resignFirstResponder».

Любая помощь будет принята с благодарностью.

Ответы [ 5 ]

3 голосов
/ 13 августа 2010

Единственный способ сделать это - создать подкласс UITableView, реализовать метод touchesBegan в своем подклассе UITableView и отправить объекты UITextField в UITableView. Вот как это должно выглядеть -

//  GRTableView.h
//  StackOverflow Example
//
//  Created by Raphael Caixeta on 8/13/10.
//  Copyright 2010 Raphael Caixeta. All rights reserved.
//

#import <UIKit/UIKit.h>


@interface GRTableView : UITableView <UITableViewDelegate> {

    UITextField *textField;

}

@property(nonatomic, retain) UITextField *textField;

@end

//
//  GRTableView.m
//  StackOverflow Example
//
//  Created by Raphael Caixeta on 8/13/10.
//  Copyright 2010 Raphael Caixeta. All rights reserved.
//

#import "GRTableView.h"

@implementation GRTableView
@synthesize textField;

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

- (void)dealloc {
    [super dealloc];
}


@end

И затем в вашем обычном файле, где вы будете размещать UITableView, просто выделите подклассное представление и передайте текстовое поле подклассу. Надеюсь, это поможет.

0 голосов
/ 19 августа 2010

Есть более простой способ сделать это, чем стандартный «подкласс UITableView» или «добавить подкласс UIView и обрабатывать касания». Я создаю UIB-кнопку с чистым фоновым цветом над областью, которую я хочу обрабатывать касаниями. Когда я добавляю его в представление, я устанавливаю его скрытое свойство в YES.

Когда текстовое поле начинает редактироваться, я установил скрытое свойство кнопки на NO.

Затем кнопка просто реагирует на событие элемента управления UITouchUpInside в методе, который вызывает [textField resignFirstResponder] и button.hidden = YES.

0 голосов
/ 16 августа 2010

Вы можете скрыть клавиатуру в следующих условиях:

    • (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath {}
    • (void) TextField: (UITextField *) TxtFld textDidChange: (NSString *) searchText {}

Inэто два условия, которые вы должны поместить [TxtFld resignFirstResponder];А также, когда ваша работа над текстовым полем закончена, вы выполняете некоторые действия над этим событием, также вы должны написать [TxtFld resignFirstResponder];где TxtFld является объектом для поля UIText.

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

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

0 голосов
/ 09 августа 2010

Это очень просто: создайте прозрачный объект UIView, который получает касания в нужной области, а когда касание находится в границах этого представления, вызовите resignFirstResponder.

// somewhere in a view controller
UIView *backgroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
[self.view addSubview:backgroundView];

// in the touchesBegan:withEvent: method, for example
UITouch *touch = [[event allTouches] anyObject];

if ([field isFirstResponder] && [touch view] == backgroundView) {
    [field resignFirstResponder];
}

В качестве альтернативы, вы можете пропустить материал backgroundView и просто добавить условный оператор, например, в ваш touchesBegan: withEvent: method:

UITouch *touch = [[event allTouches] anyObject];

if ([field isFirstResponder] && [touch view] != field) {
    [field resignFirstResponder];
}

Если касание есть! (не) в пределах field, затем вы хотите удалить клавиатуру.

0 голосов
/ 09 августа 2010

Попробуйте реализовать метод - (void)textFieldDidEndEditing:(UITextField *)textField UITextFieldDelegate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...