Miałem kilka przypadków, w których testerzy zgłosili, że klawiatura zniknie, gdy zaczną pisać w niektórych polach w mojej aplikacji. Prześledziłem przepływ za pomocą symulatora i podczas debugowania na telefonie i problem nie wystąpił nigdy. Jednak kiedy próbowałem go na telefonach bez telefonu, działo się to dość konsekwentnie.Klawiatura znika sporadycznie podczas edycji z użyciem IOS 8
Oto kilka istotnych kodów. Wszystko to ma na celu ukrycie klawiatury, gdy użytkownik kliknie poza polem tekstowym. Moi UIViews są podklasy mojej klasie Touchview, który odbiera wszystkie poprawki:
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
TouchView.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;
}
I skonfigurowany główny widok jako widok dotykowy i uwzględniono to w widokuDodLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
HMWTouchView * touchView = (HMWTouchView*) self.view;
touchView.touchDelegate = self;
...
}
Oto wdrożenie metody delegata:
-(UIView *) handleTouches:(NSSet *)touches withEvent:(UIEvent *)event inView:(UIView *) hitView {
if (![hitView isKindOfClass:[UIButton class]]) {
[[UIResponder firstResponder] resignFirstResponder];
}
return self.view;
}
To wygląda to przynajmniej zmiana w jaki reaguje na IOS 8 trafień.
ja już doświadcza podobnego problemu: patrz tackoverflow.com/questions/26651384/prevent-or-detect-events-passed-on- from-ios-8-keyboard. Szczególną rzeczą jest to, że pojawia się tylko wtedy, gdy aplikacja po aplikacji przeszła na drugi plan i została ponownie przeniesiona na pierwszy plan. – Codo
W moim testowaniu wszystko, co musisz zrobić, to pokazać klawiaturę, zawiesić/wznowić i pokazać klawiaturę. W tym momencie połączenia hitTest będą wykonywane na widokach za klawiaturą. Ostateczną poprawką było dodanie didShow i willHide słuchaczy i śledzenie stanu klawiatury. – gnichola