2013-12-03 3 views
1
дизайн

Мой проект:Отклонить клавиатуры, когда прикосновение началось UITableView и Googlemap Посмотреть

UINavigationController ---> UITableViewController ---> UIViewController

У меня есть UISeachBar на navigationItem.titleView

Я пытался использовать UITapGestureRecognizer, он работает, но не как ожидалось. Клавиатура только увольняется, когда я касаюсь UITableViewCell.

Я хочу, чтобы UITableView отвечал на touchesBegan, чтобы я мог заставить клавиатуру исчезать всякий раз, когда я касаюсь UITableViewCell или просто прокручиваю на столе.

Кроме того, мой UIViewController содержит вид googlemap, он отвечает на touchesBegan, но только одно первое касание, после чего любые другие касания будут игнорироваться.

Может ли кто-нибудь помочь, pls?

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

+0

Вы пробовали подклассифицировать UITableView и переопределять события касания? – Joshua

ответ

1

Попробуйте создать подкласс UITableView так:

subclassTB.h 

#import <UIKit/UIKit.h> 

@interface subClassTB : UITableView 

@end 


subclassTB.m 
#import "subclassTB.h" 


@implementation subClassTB 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     // Initialization code 
    } 
    return self; 
} 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect 
{ 
    // Drawing code 
} 
*/ 
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    // do your stuff here 
    //NSLog(@"tap registered"); 
    [super touchesBegan:touches withEvent:event]; 
} 
@end 

и в текущем контроллере инициализировать таблицу с помощью

subclassTB *yourtable = [[subclassTB alloc]initWithFrame:youFrame style:yourStyle];

+0

Я пробовал, как вы сказали. Он закрыл клавиатуру, когда я коснулся клавиатуры. Тем не менее, событие touch на 'UITableViewCell' было отменено, даже с' [super touchhesBegan: withEvent:] '. Можете ли вы дать мне дополнительную помощь? Спасибо. –

+0

Какие события вы делали в UITableViewCell? и можете ли вы предоставить некоторые коды. Я уже тестировал его, подклассифицируя UITableView, и событие UITableViewCell не переопределено, может быть, вы делаете что-то еще. – Joshua

+0

благодарю Джошуа, это была моя ошибка. Я использовал 'Category' на' UITableView' и реализовал 'touchhesBegan: withEvent:'. Вот почему событие UITableViewCell было отменено. Однако я не понимаю различий между этими двумя, подклассом и категорией, и почему категория отменяет события на 'UITableViewCell', а подклассы - нет. –

1

Попробуйте это ...

Добавьте пустое изображение, охватывающее весь вид (размер устройства), затем добавьте распознаватель жестов для этого изображения, а затем в методе обратного вызова напишите приведенный ниже код.

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    UIImageView *image;//your IBOutlet imageview 
    UITapGestureRecognizer *recog=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(called:)]; 
    [image addGestureRecognizer:recog]; 
}  

-(void)called:(UITapGestureRecognizer *)sender 
{ 
    [[[UIApplication sharedApplication] keyWindow] endEditing:YES]; 
} 
2

Попробуйте

[self.view endEditing:YES]; 
Смежные вопросы