2009-09-05 4 views
4

Lorsque mon application iPhone démarre, l'écran principal est doté d'un clavier. Actuellement, le clavier se lève dès que le reste de l'interface est affiché et cela est visuellement distrayant.Comment rendre un clavier iPhone invisible à mesure qu'il se lève?

Comment afficher l'affichage avec le clavier en place?

Depuis que je fais déjà semblant d'une partie du reste de l'écran pendant le démarrage afin que l'utilisateur voit ce qu'ils faisaient en dernier, j'ai pensé que je pourrais simuler le clavier aussi bien. Mais si le mouvement est là quand le vrai clavier apparaît, j'ai perdu l'effet. Le clavier est, autant que je sache, sur une fenêtre séparée, pas seulement sur une vue séparée, donc je ne peux pas la superposer avec ma propre image.

Y a-t-il un moyen de superposer le clavier avec ma propre image telle qu'elle apparaît, ou de ne pas afficher le clavier jusqu'à ce qu'il soit complètement relevé, ou de rendre son animation instantanée?

Répondre

5

Ma réponse originale a le clavier Animer avec le contrôleur de vue si elle est une transition animée (à savoir pousser un contrôleur de vue ou présentant un contrôleur modal avec animation: OUI). Cependant, le clavier s'anime toujours si le nouveau contrôleur de vue est affiché sans transition animée, donc cela ne résout pas votre problème.

Voici une autre approche qui a fonctionné dans mes tests. Essayez de désactiver les animations pendant que vous affichez le contrôleur + le clavier.

[UIWindow beginAnimations: nil context: NULL]; 
[UIWindow setAnimationsEnabled: NO]; 

RestoredController *controller = [[[RestoredController alloc] init] autorelease]; 
[self.navigationController pushViewController: controller animated: NO]; 

[UIWindow commitAnimations]; 

Vous aurez toujours besoin de faire le terrain le premier intervenant dans viewWillAppear: ou viewDidAppear:

+0

Merci, cela fonctionne maintenant. \t [UIWindow beginAnimations: nil contexte: NULL]; \t [UIWindow setAnimationsEnabled: NO]; \t [[[sous-vues de fenêtre] objectAtIndex: 0] removeFromSuperview]; \t \t // Débarrassez-vous du faux écran \t [window addSubview: mainController.view]; \t \t \t \t \t \t // Ajouter le vrai \t [UIWindow commitAnimations]; Je dois juste ajuster mon faux écran pour inclure l'image du clavier maintenant et j'aurai fini. –

+0

Rats. Pas de formatage dans les commentaires? –

0

Dans viewWillAppear:, vérifiez que la vue est chargée (via self.view) et définissez le premier répondeur sur le champ correct. Cela permet d'afficher le clavier complètement lorsque la vue est réellement affichée au lieu de l'animation dans

Par exemple:.

- (void) viewWillAppear: (BOOL) animated { 
    [super viewWillAppear:animated]; 

    NSString *storedID = [[NSUserDefaults standardUserDefaults] stringForKey:@"storedID"]; 
    if ([storedID length] > 0) { 
    idField.text = storedEmail; 
    [passwordField becomeFirstResponder]; 
    } else { 
    [idField becomeFirstResponder]; 
    } 
} 
+0

je faisais que viewDidAppear et déplacé le code à viewWillAppear. Cependant, j'ai le même comportement qu'avant. [super viewWillAppear: NO] n'a pas d'effet non plus –

+0

Je fais ce que vous faites dans un contrôleur de vue modale et cela fonctionne, donc je sais que cela peut être fait. Donc, peut-être que la réponse est d'avoir un contrôleur de vue fictif, puis d'ajouter un contrôleur de vue modale sur le dessus et de faire la transition sans animation. –

+0

Essayé en utilisant un contrôleur de vue intermédiaire: pas de chance. Si un contrôleur de vue est ajouté de manière modale, il existe un choix d'animation ou non. Si OUI alors la vue entière vient du bas avec le clavier en place. Si NON, la vue apparaît instantanément, mais le clavier suit toujours. –

0

Pas une réponse, mais voici un code.

J'ai défini la police pour mon UITextView dans viewDidLoad. La vue est instanciée par le NIB et la sortie est correctement configurée.

-(void)viewWillAppear:(BOOL)animated; 
{ 
[super viewWillAppear:animated]; 

// Start with the text from the currently edited message 
NSString *startString = self.messageManager.editingMessage.text; 
// start string processing omitted 
self.editingMessageEditingView.text = startString; 

if([self showingMessageList]) { 
    [self.editingMessageEditingView resignFirstResponder]; 
} else { 
#if DEFAULT_SCREEN==1 
    [[self.tools.items objectAtIndex:kPVToolBarItemDelete] setEnabled:NO]; 
    [[self.tools.items objectAtIndex:kPVToolBarItemSendLater] setEnabled:NO]; 
#else 
    [self.editingMessageEditingView becomeFirstResponder]; 
#endif 
} 
Questions connexes