2010-05-25 2 views
0

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.

+0

Comment le clavier est-il dans une sous-vue? –

+0

Plus pertinent, veuillez fermer. – Moshe

Répondre

1

clavier: Cherchez UIKeyboardAppearanceAlert

En ce qui concerne la détection de bougé. Une fois que le UITextField quitte le premier répondeur (pas au point, clavier caché), vous devez vous assurer qu'un autre UIResponder dans la chaîne devient firstResponder. Par exemple, si vous avez un bouton qui envoie -resignFirstResponder au champ texte, vous devez faire ceci:

- (IBAction)pressButton { 
    [textField resignFirstResponder]; 
    [self becomeFirstResponder]; 
} 
+0

Cela a fait son travail et a été posté en premier. Réponse incomplète cependant. – Moshe

1

essayer d'utiliser [self.view endEditing:YES];

et clavier pour être utilisé vitreux:

[textfield setKeyboardAppearance:UIKeyboardAppearanceAlert]; 

Espérons que cela aide. Merci, Madhup

+0

La première méthode est une méthode pratique sur ce que j'essayais. Rien ne va, ça ne marche pas. – Moshe