2010-02-19 2 views
6

J'ai une fenêtre dans une application iPhone, qui est affichée de manière modale pour permettre à l'utilisateur d'entrer ses paramètres pour un service Web lors de la première exécution.IPhone UITextField ne montre pas le caret d'édition ou le texte d'espace libre d'effacement quand il est tapé

Les champs de texte disposent d'un texte d'aide, et lorsque vous les tapez, le clavier affiche et vous permet de saisir du texte.

Malheureusement, les champs de texte ne suppriment pas le texte d'aide, affichent le curseur d'édition ou affichent le texte saisi (comme dans la capture d'écran ci-dessous).

The wonderful issue... http://img522.imageshack.us/img522/2308/iphonenstextfieldissue.png

Toutes les suggestions?

La fenêtre est affichée avec [self presentModalViewController:<controller_name> animated:YES];, ce qui peut ou peut ne pas être la cause de ce problème - lorsque j'exécute l'interface utilisateur via l'application 'test' d'Interface Builder, les zones de texte réagissent normalement.

Clear when editing begins a été défini pour les deux champs.

Merci d'avance!

Édité: En savoir plus Après l'info Bart Gottschalk fourni Je pensais que je devrais ajouter quelques informations supplémentaires. Tout d'abord, l'application est une application basée sur la navigation. Deuxièmement, l'application de test recommandée par Bart a fonctionné correctement, ce qui fait sortir la fenêtre modale et la vue de l'équation. Troisièmement, je présentais la vue modale lorsque la méthode de délégué -(void)viewWillAppear... était appelée - ce qui peut très bien être le mauvais endroit ... mais je ne suis pas sûr à 100% si je devrais présenter la vue modale de l'intérieur le didFinishLaunchingWithOptions du délégué App ...

(ce qui se passe sur le simulateur et l'iPhone 3.1.3)

+0

- (void) viewWillAppear ... me causait aussi des problèmes lorsque j'ai mis l'application de test ensemble.C'est pourquoi j'ai utilisé applicationDidFinishLaunching. Pourquoi utiliser didFinishLaunchingWithOptions? Quelles sont vos préoccupations concernant l'appel de presentModalViewController à partir de cette méthode? Il semble que ça devrait aller pour moi. –

+0

@Bart Gottschalk didFinishLaunchingWithOptions est ce que XCode a configuré lorsque j'ai créé la nouvelle application basée sur la navigation. J'ai essayé d'afficher cette vue modale en utilisant [navigiationController présent ...] cependant .. cela ne semble pas fonctionner non plus ... Peut-être que j'ai besoin de reconsidérer mon design pour contourner ce problème inhabituel ...? –

+0

Pouvez-vous publier le code dans votre délégué d'application? J'ai essayé de créer une application de navigation de test et cela semble fonctionner correctement avec applicationDidFinishLaunching. J'ai posté le code que j'ai dans cette méthode comme une deuxième édition dans ma réponse ci-dessous. –

Répondre

1

Eh bien, je me suis dit simplement, mais honnêtement, sans la persistance et l'aide impressionnante de Bart, il aurait fallu beaucoup plus de temps et être beaucoup plus frustrant.

Il s'avère que le problème était que j'utilisais une fenêtre au lieu d'une vue dans le fichier XIB. C'est pourquoi, lors de l'affichage de la vue modale dans le contrôleur de navigation, il ne s'afficherait pas correctement (c'est-à-dire uniquement un écran blanc) et pourquoi le UITextField ne fonctionnerait pas correctement lors de l'affichage de la vue depuis le RootViewController. Donc, pour récapituler - les vues modales devraient avoir UIView, pas UIWindow dans le fichier XIB/NIB.

Merci pour votre aide Bart!

3

Dans Interface Builder ne vous cochez la case « Effacer lors de la modification commence »? Avec cette case cochée, le champ de texte doit effacer toute valeur une fois que l'utilisateur appuie sur pour éditer quel est le comportement que je pense que vous recherchez.

Vous pouvez également définir la même propriété par programmation en utilisant clearsOnBeginEditing si cela vous convient dans votre code. Je pense que c'est ce que vous avez fait et qu'il ne se comporte pas comme prévu. Juste vérifier cela comme une première étape pour vous aider à déboguer.

Est-ce que cela se produit aussi bien dans le simulateur que sur un appareil de test?

Bart

Edité ci-dessous ...

Cela semble étrange. Débarrassons tout sauf les bases de la présentation d'une vue modale lorsque l'application démarre et voyons ce qui se passe.

J'ai recréé l'application la plus basique (que je connaisse) pour tester la présentation d'un contrôleur de vue modal au lancement et vérifier que la modification du champ fonctionne correctement. Qu'est-ce qui se passe pour vous lorsque vous faites la même chose/similaire dans un nouveau projet?

Voici ce que je fais:
1) Créer une nouvelle application basée vue dans Xcode appelé "ModalViewTest"

2) Créer une nouvelle UIViewController avec xib appelé ModalViewController

3) ModalViewController.h ajouter une méthode

-(IBAction)closeModalView; 

4) Dans ModalViewController.m ajouter la mise en œuvre de la méthode comme

-(IBAction)closeModalView { 
    [self dismissModalViewControllerAnimated:YES]; 
} 

5) Dans ModalViewController.xib, créez deux champs de texte et définissez le texte de l'espace réservé pour chacun à abcd1234 et confirmez que "Effacer lorsque l'édition commence" est cochée.

6) Dans le ModalViewController.xib ajouter un bouton "Fermer" et mis en Retoucher l'intérieur au feu "closeModalView"

7) Dans le délégué de l'application (ModalViewTestAppDelegate) ajoutez l'importation suivante

#import "ModalViewController.h" 

8) Dans le délégué d'application (ModalViewTestAppDelegate) applicationDidFinishLaunching, ajoutez ce qui suit après la ligne contenant [window makeKeyAndVisible];

ModalViewController *modalViewController = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil]; 
[viewController presentModalViewController:modalViewController animated:YES]; 

9) Enregistrer tout

10) créer et exécuter cette nouvelle application

Est-ce que l'édition des champs de texte fonctionnent comme prévu? Si oui, qu'est-ce qui différencie la façon dont vous construisez et présentez votre modalView? Si non, nous devrons creuser davantage pour déterminer ce qui se passe dans votre environnement.

Second Modifier ...

Lors de la création d'une application de navigation, je l'ai fait ce qui suit pour présenter le point de vue modal au démarrage de l'application. Est-ce que cela fonctionne pour vous à la fois dans votre application de test et dans votre application réelle?

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after app launch  

    [window addSubview:[navigationController view]]; 
    [window makeKeyAndVisible]; 

    ModalViewController *modalViewController = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil]; 
    [navigationController presentModalViewController:modalViewController animated:YES]; 

} 
+0

'Effacer lorsque l'édition commence' est sélectionné pour les deux champs de texte. J'ai également essayé avec ce désactivé avec aucun changement. Le problème se produit à la fois sur le simulateur et sur un appareil de test. Quelque chose d'intéressant à noter est que si je tape et maintenez pour faire apparaître la loupe pour la sélection, je peux voir le texte que j'ai entré ... –

+1

Ceci est étrange. J'ai mis à jour ma réponse ci-dessus. S'il vous plaît jeter un coup d'oeil et laissez-moi savoir ce que vous pensez ou ce qui se passe quand vous essayez ce que je suggère. –

+0

Merci pour la mise à jour - vous avez mis * plus * d'efforts que je n'aurais jamais pensé. L'application de test a bien fonctionné, mais j'avais une idée que vous pourriez être en mesure de confirmer. J'ai mis à jour ma question originale ci-dessus. Merci tas! –

0

J'ai le même problème mais dans iOS7 seulement. Je l'ai résolu en changeant la couleur de textField en bleu dans le Storyboard

Questions connexes