2009-05-28 5 views
0

J'ai un UIViewController (ContentViewController) connecté à un View xib. Je dépose un TextView sur le UIView et il apparaît comme une sous-vue dans la hiérarchie dans IB.
ContentViewController a une étiquette comme sortie, qui est connectée à une étiquette sur ContentView.xib. Lorsque le code ci-dessous s'exécute, la première vue montre la vue du texte mais le défilement des autres vues/pages ne révèle que l'étiquette.Ajout de UITextView en tant que sous-vue dans UIView puis à UIScrollView

for(int i=0; i< 5; i++){ 
    ContentViewController *contentView = [[ContentViewController alloc] initWithNibName:@"ContentView" bundle:[NSBundle mainBundle]]; 
    [contentView loadView]; 
    contentView.theLabel.text =[NSString stringWithFormat:@"hello again..%d", i]; 
    [self.scrollView addSubview:contentView.view]; 
} 

Je peux faire glisser un bouton ou un champ de texte sur la vue dans IB et ils sont tous présents lorsque je fais défiler les pages. Le texte ci-dessus est également défini sur l'étiquette. Le textview disparaît après la première page. Je ne peux pas non plus définir son texte. J'ai traîné une nouvelle textview sur le UIView et il disparaît après la première page aussi bien. Y at-il quelque chose de différent que je dois faire pour le textview?


J'ai trouvé que le UIScrollView est sur chaque page. Si je glisse verticalement à l'endroit où se trouve le scrollview, le texte apparaîtra. Mais je dois le faire pour toutes les scrollviews après le premier.

Cependant, une fois que je les ai glissés, le texte reste visible jusqu'à ce que l'application soit redémarrée. S'il n'y a pas assez de texte pour provoquer le défilement, le textview n'apparaîtra jamais. Des suggestions sur ce comportement?

Répondre

1

Essayez:

[textView setNeedsDisplay];


Réponse originale

Vous ne voudriez pas avoir à traiter avec le textview différemment. Je m'inquiète d'abord de votre appel de "loadview". Vous n'êtes jamais censé appeler cela directement. Il est invoqué automtically si nécessaire.

De même, vous devez déclarer contentview avant la boucle et vous avez des fuites de mémoire.

Votre autre problème est que vous ne modifiez jamais l'image de chaque vue pendant la boucle. Ils ont tous une origine de {0,0}. Autant que je peux voir à partir de votre code. C'est peut-être pourquoi vos opinions sont cachées.

Enfin, sur une note de style, je ne m'appellerais pas voir les contrôleurs XXXXXview, ils devraient avoir le mot de contrôle en eux.

CGRect frame; 
    ContentViewController *myContentViewController = nil; 

    for(int i=0; i< 5; i++){ 
     myContentViewController = [[myContentViewController alloc] initWithNibName:@"ContentView" bundle:[NSBundle mainBundle]]; 

     frame = myContentViewController.view.frame; 
     frame.origin.x=(frame.size.width*i); 
     myContentViewController.view.frame=frame; 

     myContentViewController.theLabel.text =[NSString stringWithFormat:@"hello again..%d", i]; 
     [self.scrollView addSubview: myContentViewController.view]; 
     [myContentViewController release]; 
    } 

Ajouter: Vérifiez également le scrollviews cadre contentView propriété:

scrollView.contentSize = CGSizeMake(numberOfContentViews*contentViewWidth, contentViewHeight); 

Pour ajouter d'autres:

Essayez d'ajouter textView programatically à viewDidLoad ou viewDidAppear à voir si cela fonctionne. Après vos commentaires, si je devais prendre une autre supposition, je dirais que vous pourriez manipuler le textView ailleurs dans votre code après qu'il ait été ajouté. Commencer à commenter les lignes qui affectent le textView et voir ce qui se passe.

+0

Non viewDidLoad, loadView. L'appel de viewDidLoad est parfois nécessaire, mais pas loadView (AFAIK). En outre, avez-vous défini la taille de contenu de votre scrollview comme suit: (numberOfContentViews * contentViewWidth)? –

+0

Merci. Appeler viewDidLoad est temporaire jusqu'à ce que le textview fonctionne. Sinon, je vais devoir créer des propriétés non iBOutlet, puis les affecter pendant viewDidLoad. Le textview ne s'affiche toujours pas après la première vue avec votre code. L'étiquette s'affiche toujours correctement. Je peux également ajouter un UIWebView et UIScrollView avec une étiquette dedans. Ils montrent sur toutes les pages. – 4thSpace

+0

Oui à la question (numberOfContentViews * contentViewWidth). Les vues de contenu s'affichent correctement. Je peux placer des contrôles dans chaque coin et les voir. J'ai aussi essayé de mettre une textview au milieu mais elle disparaît après la première vue. – 4thSpace

Questions connexes