2009-10-13 16 views
1

J'ai une question sur les meilleures pratiques concernant les Nibs et UISegmentedControls.Modification des vues de UISegmentedControl

J'ai un fichier nib qui contient un UISegmentedControl avec 3 boutons. Chacun d'entre eux affiche une vue différente dans la partie principale de la fenêtre lorsqu'il est basculé.

Tout fonctionne bien, mais je soupçonne que mon approche est erronée et je me demandais si quelqu'un pouvait suggérer la façon dont je "voulais" le faire.

Actuellement NIB j'ai 3 UIViews qui sont superposées à une autre, puis dans le fichier .m je modifie chaque UIViews .hidden pour cacher et de révéler celui que je suis intéressé.

- (IBAction)segmentAction:(id)sender 
{ 
    if([sender selectedSegmentIndex] == 0) 
    { 
     [self.view1 setHidden:NO]; 
     [self.view2 setHidden:YES]; 
     [self.view3 setHidden:YES]; 
    } 
    else if([sender selectedSegmentIndex] == 1) 
    { 
     [self.view1 setHidden:YES]; 
     [self.view2 setHidden:NO]; 
     [self.view3 setHidden:YES]; 
    } 
    else if([sender selectedSegmentIndex] == 2) 
    { 
     [self.view1 setHidden:YES]; 
     [self.view2 setHidden:YES]; 
     [self.view3 setHidden:NO]; 
    } 
} 

Tout "fonctionne" mais le fichier nib est difficile à modifier car vous ne pouvez pas facilement "éteindre" les autres UIViews, donc je sélectionne invariablement le mauvais élément sur la toile. Aussi IB se plaint que: "Cette vue chevauche l'un de ses frères et soeurs" dans la boîte de dialogue d'information.

Quelle est l'approche que je devrais prendre étant donné que j'aimerais que toutes les vues soient présentées dans InterfaceBuilder. Dois-je avoir 4 fichiers nib? Si oui, comment dois-je les charger quand un segmentControl est pressé? Tout exemple de code que vous pouvez me diriger vers?

grâce

Répondre

2

du haut de ma tête, voici deux choses que vous pouvez essayer:

1) faire 3 objets UIView séparés dans IB, mais ne pas les ajouter à la vue heirarchy

En supposant que Si vous disposez d'un contrôleur d'affichage contenant les trois vues, vous pouvez, dans IB, créer les trois vues en faisant glisser chaque vue de la bibliothèque vers la fenêtre intitulée YourNib.nib ou YourXib.xib. Donc, ne faites pas glisser les vues dans la vue principale du contrôleur de vue.

onglet Maintenant, vous pouvez double-cliquer sur chacun et de les éditer eux-mêmes, sans avoir à essayer de sélectionner les différents points de vue parce qu'ils se chevauchent (parce qu'ils ne sont pas)

dans les connexions, connectez le Afficher la propriété de vue du contrôleur sur l'une des vues.

Ceci définit la valeur par défaut.

maintenant dans votre code, vous pouvez changer de vue est connecté à:

[MyViewController setView: view2];

et de recharger les vues.2) faire une vue vraiment grande (ou très large) et changer la position y de la vue w/par rapport à l'image de la vue parent lorsque vous cliquez sur un bouton de vue segmentée pour qu'il apparaisse à l'utilisateur comme s'il 'va séparer les pages

cela facilite l'animation et la transition entre les "vues". mais utilisera plus de mémoire car tous les éléments sont chargés même s'ils ne sont pas visibles. mais tu le faisais quand même.

+0

Pouvez-vous clarifier ce que vous entendez par 'make 3 objets UIView distincts, mais ne les ajoutez pas à la hiérarchie de la vue? Et ce que vous entendez par 'créer les 3 vues en faisant glisser chaque vue de la bibliothèque vers la fenêtre intitulée YourNib.nib ou YourXib.xib'. –

1

Cela fonctionne comme vous l'avez, mais vous avez raison que ce n'est pas idéal. Sans aucun contexte, la manière la plus naturelle d'implémenter ceci serait un UITabBarController gérant trois UIViewControllers, chacun avec sa propre vue. Vous bénéficierez de tous les rappels lorsque vous changez de vue (viewWill/DidAppear, viewWill/DidDisappear, etc.) + il sera plus facile de séparer vos fichiers nib. Les rappels peuvent être très utiles pour charger/recharger des données au moment opportun.

Questions connexes