Ho avuto diversi casi in cui i tester hanno segnalato che la tastiera spariva ogni volta che iniziarono a digitare in alcuni campi della mia app. Ho tracciato il flusso utilizzando il simulatore e durante il debug su un telefono e il problema non si è verificato, mai. Tuttavia, quando l'ho provato su un telefono senza fili è successo in modo abbastanza coerente.La tastiera scompare a intermittenza quando si modifica utilizzando IOS 8
Ecco un codice pertinente. Tutto questo per nascondere la tastiera quando un utente tocca un campo di testo. I miei UIViews sono sottoclassi della mia classe TouchView, che riceve tutti i tocchi:
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;
}
ho configurato vista principale come touchview e incluso nel viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
HMWTouchView * touchView = (HMWTouchView*) self.view;
touchView.touchDelegate = self;
...
}
Ecco un'implementazione del metodo delegato:
-(UIView *) handleTouches:(NSSet *)touches withEvent:(UIEvent *)event inView:(UIView *) hitView {
if (![hitView isKindOfClass:[UIButton class]]) {
[[UIResponder firstResponder] resignFirstResponder];
}
return self.view;
}
Questo appare come è almeno un cambiamento nel modo in cui IOS 8 risponde ai colpi.
ho sperimenta un problema simile: vedi tackoverflow.com/questions/26651384/prevent-or-detect-events-passed-on- da-ios-8-tastiera. La cosa particolare è: si verifica solo se l'app dopo l'app è passata allo stato di sfondo e portata nuovamente in primo piano. – Codo
Nei miei test tutto ciò che dovete fare è mostrare la tastiera, sospendere/riprendere e mostrare la tastiera. A quel punto, le chiamate hitTest verranno effettuate su visualizzazioni dietro la tastiera. La mia soluzione finale era aggiungere gli ascoltatori didShow e willHide e tenere traccia dello stato della tastiera da solo. – gnichola