当用户点击UITableView和UIScrollView中的文本字段之外时隐藏键盘

时间:2012-05-03 13:20:12

标签: iphone ios5

我的UIViewController层次结构如下

UIView
    UIScrollView
        UITableView
            UITableViewCell
                UITextField

UITableView以编程方式添加到视图控制器中。 当用户在视图或UITableView上点击UTTextField外部时,我想隐藏键盘 当用户点击其他UITableView行时,我正在执行一些方法

我试过

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

UIScrollView不会发送触摸事件。

我尝试添加点按手势

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
[singleTap setNumberOfTapsRequired:1];

[[self view] addGestureRecognizer:singleTap];

但是使用TapGesture,会隐藏以下事件

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

还有其他可能隐藏键盘的方法吗?

5 个答案:

答案 0 :(得分:2)

使用代码:[self.view endEditing:YES];

答案 1 :(得分:1)

使用UITextFieldDelegate 和方法

– textFieldShouldEndEditing:(UITextField*) txtField
{

[txtField resignKeyPads];
return YES:
}

这也可以通过scrollview delgate来完成

-(void) scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    //resign all keypads of all textfields use array containing keypads
}

更重要的是将UIView的类更改为UIControl并创建方法IBAction并将UIControl touchupInside连接到该ibaction,它将重新签名键盘

答案 2 :(得分:0)

如果您仍想使用点按手势,则需要将手势识别器添加到表格背景中,如下所示:

[tableView.backgroundView addGestureRecognizer:singleTap];

这样可以防止隐藏:

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

答案 3 :(得分:0)

如果你想在背景视图上放置一个手势识别器,你需要确保它有一个。

添加

self.tableView.backgroundView = [[UIView alloc] initWithFrame:self.tableView.bounds];

答案 4 :(得分:0)

当UITableview是编辑模式时,UITableView didSelectRowAtIndexPath不会调用。所以你想创建自定义手势事件来处理相同的事情。

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//cell design code goes here.
 UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
doubleTapGestureRecognizer.numberOfTapsRequired = 1;
//tapGestureRecognizer.delegate = self;
[cell addGestureRecognizer:doubleTapGestureRecognizer];
 return cell; 
} 
//Handle the click event 
-(void) handleDoubleTap:(UITapGestureRecognizer*)sender{ 
[self.view endEditing:YES]; 
UITableViewCell * cell =(UITableViewCell*) sender.view; 
//get the selected table indexpath. 
NSIndexPath * indexPath= [tblCart indexPathForCell:cell]; //to handle the scroll
tblCart scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
NSLog(@"Comming"); 
} 

我希望它可以帮助您解决同样的问题。 http://greatindiaclub.oliwy.net/?p=1180