我遇到过几个案例,测试人员报告说,每当他们开始在我的应用程序中的某些字段中输入内容时,键盘就会消失。我使用模拟器跟踪流程,并在手机上调试时,问题从未发生。然而,当我在不受限制的手机上尝试时,它的发生相当一致。
这是一些相关的代码。所有这些都是为了在用户点击文本字段外部时隐藏键盘。我的 UIViews 是 Touchview 类的子类,它接收所有触摸:
触摸视图.h:
@protocol TouchViewDelegate <NSObject>
-(UIView *) handleTouches:(NSSet *)touches withEvent:(UIEvent *)event inView:(UIView *) view;
@end
@interface TouchView : UIScrollView
@property (nonatomic, strong) id <TouchViewDelegate> touchDelegate;
@end
触摸视图.m:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView * touchedView = [super hitTest:point withEvent:event];
NSSet* touches = [event allTouches];
[self.touchDelegate handleTouches:touches withEvent:event inView:touchedView];
return touchedView;
}
我将主视图配置为 Touchview 并将其包含在 viewDidLoad 中:
- (void)viewDidLoad
{
[super viewDidLoad];
HMWTouchView * touchView = (HMWTouchView*) self.view;
touchView.touchDelegate = self;
...
}
这是委托方法的实现:
-(UIView *) handleTouches:(NSSet *)touches withEvent:(UIEvent *)event inView:(UIView *) hitView {
if (![hitView isKindOfClass:[UIButton class]]) {
[[UIResponder firstResponder] resignFirstResponder];
}
return self.view;
}
这看起来至少是 iOS 8 对点击的响应方式的改变。