1

我的 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

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

4

5 回答 5

2

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

于 2012-05-25T12:09:27.193 回答
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,它将放弃键盘

于 2012-05-03T13:25:30.060 回答
0

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

添加

self.tableView.backgroundView = [[UIView alloc] initWithFrame:self.tableView.bounds];
于 2012-07-23T22:19:07.020 回答
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"); 
}
于 2012-11-15T10:28:20.010 回答
0

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

[tableView.backgroundView addGestureRecognizer:singleTap];

这将防止隐藏:

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
于 2012-05-03T13:29:54.580 回答