Pop-up modal avec UITableView sur iPhone
J'ai besoin de pop-up rapidement une boîte de dialogue permettant à l'utilisateur de sélectionner une option dans un UITableView à partir d'une liste d'environ 2 à 5 éléments. Dialogue sera modal et de ne prendre jusqu'à environ 1/2 de l'écran. J'ai des aller-retours entre la façon de gérer cela. Dois-je sous-classe UIView
et d'en faire une UITableViewDelegate
& DataSource
?
Je voudrais aussi préfèrent pondre cette vue de l'IB. Donc, pour afficher ce que je ferais quelque chose comme ça de mon point de vue contrôleur (à supposer que j'ai une propriété de mon point de vue contrôleur pour DialogView *myDialog;
)
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"DialogView" owner:myDialog options:nil];
myDialog = [nibViews objectAtIndex:0];
[self.view addSubview:myDialog];
problème est que je suis en train de passer propriétaire:myDialog qui est nul car il n'a pas été instancié...j'ai pu passer propriétaire:auto mais que ferait mon point de vue, contrôleur de la File's Owner
et ce n'est pas ainsi que l'affichage du dialogue est câblé au bureau de l'IB.
Donc ce qui m'amène à penser que ce dialogue se veut être un soufflé UIViewController
... Mais de tout ce que j'ai lu vous ne devriez avoir qu'UN UIViewController par écran donc, ce me confond, car j'ai pu bénéficier de viewDidLoad
, etc. qui viennent avec vue contrôleurs...
Quelqu'un peut-veuillez redresser ce pour moi?
OriginalL'auteur Meltemi | 2010-03-23
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas une telle chose comme un point de vue contrôleur sur l'écran; son
view
est sur l'écran. Avec cela dit, vous pouvez présenter autant de vues que vous souhaitez sur l'écran à la fois.Je voudrais créer un nouveau point de vue et de-vue-contrôleur. Vous ne voudriez pas faire un
UIView
être unUITableViewDelegate
, vous faites uneUIViewController
être unUITableViewDelegate
. Mais au lieu de le faire manuellement, au lieu de faire de votre nouveau-vue-contrôleur une sous-classe deUITableViewController
, si vous utilisez l'iPhone OS 3.x+. Vous pouvez ensuite présenter ce point de vue contrôleur modal.Vous voulez probablement pour donner à l'utilisateur la possibilité d'annuler la sélection. Une bonne façon de le faire est d'envelopper votre nouvelle boîte de dialogue view controller dans un
UINavigationController
et puis mettre un bouton "Annuler" dans la barre de navigation. Puis utilisez le modèle de délégué à en informer le parent vue contrôleur que l'utilisateur a fait son choix, de sorte que vous pouvez sauter la pile.Voici ce que le code ressemblera à l'intérieur de votre parent-vue-contrôleur, lorsque vous souhaitez présenter cette option de dialogue:
Votre OptionViewController .h ressemblera à ceci:
Votre OptionViewController.m va avoir quelque chose comme ceci:
Qui a une méthode d'appariement de retour à votre point de vue original contrôleur comme:
Il existe de nombreux exemples tout au long de Apple est un exemple de code source qui suivent ce schéma général.
Quelle est la raison pour laquelle vous ne souhaitez pas utiliser un "affichage plein écran"? Regardez à travers les applications de votre appareil, surtout ceux d'Apple -- et compter le nombre de fois que vous voyez une liste de 2-5 options présentées par tout autre moyen. C'est exactement comment la plupart des applications de le faire; si ce n'est pour être conforme, mais aussi parce que c'est ce que l'utilisateur pourrait s'attendre. Notez que l'utilisation d'un UIAlertView n'est pas vraiment approprié, car ceux-ci sont généralement réservés pour les actions que l'utilisateur doit prendre immédiatement. Sélection d'une option dans une liste devrait être fait en utilisant le meilleur outil disponible pour cette tâche: une vue de la table.
Vous avez aussi la possibilité d'utiliser un UIPickerView dans un UIActionSheet, ce qui supprime la nécessité d'une UITableView/contrôleur et vous donne aussi pratique fait et annuler les boutons. Si vous voulez un exemple de code que je peux poster quelque chose comme une réponse possible.
Bon, le Jeu du Kit peerPickerController est un exemple d'écran partielle modal vue avec un intégré à tableview... je comprends que, dans la PLUPART des cas, la façon dont vous le suggérez, Grenouille, est préférable et même plus de sens...mais dans ce cas particulier de la mine, il n'est pas... donc, la question reste...comment? J'ai essayé de la UIViewController approche et que clairement échoue car le SDK remplit automatiquement les limites de l'écran si UIViewController de point de vue n'est pas en plein écran. Donc, je crois que je suis à gauche avec une coutume UIView. UIPickerView est une bonne idée mais j'ai peur que mon "cellules" texte sera trop large...
OriginalL'auteur Shaggy Frog