Pour ceux d'entre vous qui travaillent graphiquement, voici un diagramme de la hiérarchie de vue:UITextField arrêtant l'événement de secousse?
Root View -> UINavigationController -> UITableView -> Edit View -> Problem UITextfield
Fondamentalement, - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event;
est appelé dans ma racine Voir lorsque l'appareil secoue. Lorsqu'un utilisateur tape sur l'icône "Modifier" (un stylo, en bas de l'écran - pas le bouton d'édition traditionnel UINavigationBar), la vue principale ajoute une sous-vue à elle-même et l'anime sur l'écran en utilisant un animation personnalisée.
Cette sous-vue contient un UINavigationController qui contient un UITableView. UITableView, lorsqu'une cellule est sélectionnée, charge une sous-vue sur elle-même. Cette deuxième sous-vue est le coupable. Pour une raison quelconque, un UITextField dans cette deuxième sous-vue cause des problèmes.
Lorsqu'un utilisateur appuie sur la vue, la vue principale ne répond pas aux secousses sauf si le champ UITextField est actif (en mode d'édition?).
Informations complémentaires:
Mon mouvement Gestionnaire d'événements:
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event {
NSLog(@"%@", [event description]);
SystemSoundID SoundID;
NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"shake" ofType:@"aif"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &SoundID);
AudioServicesPlayAlertSound(SoundID);
[self genRandom:TRUE];
}
La genRandom:
Méthode:
/* Generate random label and apply it */
-(void)genRandom:(BOOL)deviceWasShaken{
if(deviceWasShaken == TRUE){
decisionText.text = [NSString stringWithFormat: (@"%@", [shakeReplies objectAtIndex:(arc4random() % [shakeReplies count])])];
}else{
SystemSoundID SoundID;
NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"string" ofType:@"aif"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &SoundID);
AudioServicesPlayAlertSound(SoundID);
decisionText.text = [NSString stringWithFormat: (@"%@", [pokeReplies objectAtIndex:(arc4random() % [pokeReplies count])])];
}
}
shakeReplies
et pokeReplies
sont les deux NSArrays de chaînes. Un est utilisé pour quand une certaine partie de l'écran est piquée et l'autre est pour lorsque l'appareil est secoué. L'application choisira au hasard une chaîne de NSArray et affichera à l'écran.
Comme toujours, les échantillons de code sont appréciés. J'ai ajouté le mien pour aider à expliquer le problème.
Comment le clavier est-il dans une sous-vue? –
Plus pertinent, veuillez fermer. – Moshe