通过触摸UITableView的背景来隐藏键盘

UITextFieldsUITableViewCell时,我正在寻找一些优化的方法来隐藏背景上的键盘。 我已经做了一些代码希望这会帮助你。

hittest似乎是正确的方式

您可以在TableView所在的View上实现触摸事件,如下所示。

还要将textField对象分配给textFieldDidBeginEditing中的成员variables,以便您能够退出显示keyborad的特定文本字段。

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

我做了一个tableview的类别来隐藏键盘上的背景点击,而tableview包含textfield

我的头文件:

 #import <UIKit/UIKit.h> #import "Utility.h" @interface UITableView (HitTest) @end 

我的实现文件:

 #import "UITableView+HitTest.h" @implementation UITableView (HitTest) UITableViewCell *activeCell; -(UIView*) hitTest:(CGPoint)point withEvent:(UIEvent*)event { NSInteger iterations = 0; // check to see if the hit is in this table view if ([self pointInside:point withEvent:event]) { UITableViewCell* newCell = nil; // hit is in this table view, find out // which cell it is in (if any) for (UITableViewCell* aCell in self.visibleCells) { iterations ++; if ([aCell pointInside:[self convertPoint:point toView:aCell] withEvent:event]) { newCell = aCell; break; } } if (!newCell) { for (UIView *view in activeCell.subviews) { iterations++; if ([view isFirstResponder]) { [view resignFirstResponder]; break; } } } else { activeCell = newCell; } NSLog(@"total Iterations:%d",iterations); } // return the super's hitTest result return [super hitTest:point withEvent:event]; } @end 

这对我来说工作得很好。