1
votes

Fusion d'une vue de table statique avec un UIViewController

J'essaie actuellement de créer un écran contenant 2 UIButton et 1 UIImageView .

En dessous de ces éléments de l'interface utilisateur, je souhaite ajouter une vue de tableau statique qui contiendrait 1 UITextField pour chaque cellule afin de créer une sorte de formulaire déroulant.

L'erreur que j'ai est la suivante:

Les vues de table statiques ne sont valides que lorsqu'elles sont intégrées dans des instances UITableViewController

Bien qu'il ne semble pas possible de créer une vue de table statique sans contrôleur de vue de table, je me demandais s'il pourrait y avoir un moyen d'obtenir le même résultat que mon idée initiale?

Veuillez noter que je construis mon interface utilisateur à l'aide du storyboard.

Voici une capture d'écran de ce que j'essayais de créer au départ:

(Voici une capture d'écran de ce que j'essayais de construire au départ)

EDIT: J'ai finalement décidé d'utiliser un contrôleur de vue statique, et implémenté les boutons dans une cellule et les autres champs de texte dans différentes cellules. Merci à tous pour votre aide.


5 commentaires

Donnez-nous du code.


Bonjour Marco, alors que j'ai construit la vue entière à l'aide du storyboard, tout ce qui est lié à l'interface utilisateur est exactement comme représenté sur le lien de capture d'écran que j'ai publié: i.stack.imgur.com/Hh6jC.png


Essayez de faire glisser UITableView vers un ViewController au lieu d'utiliser un UITableViewController ?


@Koh Malheureusement, c'est ce que j'ai essayé :( (comme indiqué sur la capture d'écran)


@Unknown_ Avez-vous essayé ma solution ? Je suppose que cela résout le problème que vous avez décrit dans votre question.


4 Réponses :


2
votes

Vous pouvez ajouter le UITableViewController en tant que childViewController à votre plus grand UIViewController (parentVC)

Ensuite, gérez la hiérarchie des vues de parentVC afin de pouvoir atteindre les 2 UIButton , 1 UIImageView et une vue de table en bas


2 commentaires

Eh bien, ce serait une bonne solution. Je pense que vous pourriez simplement faire un projet de démonstration et le fournir comme référence pour aider l'OP.


Bonjour Joshua, comme je suis encore un débutant en IOS, comment suis-je censé associer l'UITableViewController en tant que childViewController à un UIViewController? Merci



0
votes

Je pense que vous devriez gérer cet ajout d'éléments dans un UIScrollView , il n'est pas nécessaire d'utiliser un UITableView . Ainsi, vous pouvez faire défiler tout le contenu lorsque vous affichez le clavier


1 commentaires

Bonjour Alastar, Il y a quelques jours, j'ai en fait compris qu'il était possible d'utiliser des vues de table statiques pour créer un formulaire déroulant, pouvez-vous m'expliquer pourquoi il serait préférable d'utiliser UIScrollView? Merci.



-1
votes

Une vue de table statique n'est rien de plus qu'un UITableViewController qui gère les méthodes UITableViewDataSource de UITableView en votre nom.

Vous pouvez simplement ajoutez un UITableView à votre UIViewController , définissez la source de données UITableView sur votre UIViewController et implémentez les méthodes appropriées.

par exemple

class MyViewController: UIViewController, UITableViewDataSource {

    override func viewDidLoad() {
        super.viewDidLoad()
        tableview.datasource = self
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 4
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        // create UITableViewCell
    }
}


6 commentaires

Avez-vous prêté attention à cette phrase: Les vues de table statiques ne sont valides que lorsqu'elles sont incorporées dans des instances UITableViewController ?


@nayem oui, vous avez manqué ma première phrase dans ma réponse. L'implémentation d'une tableview statique n'est rien de plus que la combinaison d'un UITableViewController, contenant un UITableView et fournissant les nombres à ces fonctions déléguées. Lorsque vous demandez à un storyboard une vue de table statique, il ne fait que passer ces nombres dans la fonction init (withCoder , puis le contrôleur les transmet aux fonctions déléguées. Toute classe de tout type peut atteindre le même résultat, en faisant exactement ce que fait le storyboard. Il suffit d'ajouter les réponses aux fonctions de la source


Bonjour Simon, j'ai essayé votre solution mais l'erreur est la même :(


@Unknown_ Je crois que vous avez mal compris et que vous avez fait une erreur. Comme votre message d'erreur vous l'indique, vous ne pouvez PAS avoir de tableView statique en dehors d'un UITableViewController. Il n'y a aucun moyen de contourner cela. Vous devez soit faire ce que j'ai suggéré ci-dessus, soit ce que l'autre réponse dit, en utilisant les viewControllers enfants. Pour ma solution, faites glisser UITableView sur votre viewController, ne le définissez PAS sur statique, créez une prise nommée tableView , puis suivez mes instructions ci-dessus. Cela vous donnera la tableView que vous voulez, sans utiliser de statique. Voici ce que le paramètre statique fait pour vous


Cette réponse revient à dire "utilisez plutôt une vue tableau dynamique". Vous ne gagnez aucun des avantages habituels d'une vue de table statique en faisant cela.


@EthanHolshouser oui, car l'OP demandait comment avoir une vue de table statique sur la moitié d'un UIViewController, ce qui n'est pas possible. À l'époque, d'après les informations fournies par l'affiche, il semblait qu'il n'y avait que 2 options. 1) comme d'autres réponses l'ont suggéré, pour l'envelopper dans une vue de conteneur, ou 2) ce que j'ai suggéré d'utiliser simplement une vue de table dynamique. Compte tenu de ces deux choix, je pense que c'est un inconvénient beaucoup plus important d'avoir plusieurs UIViewControllers, plusieurs événements de cycle de vie et un écran beaucoup plus lourd ... afin d'éviter d'ajouter les 4 méthodes de protocole pour le rendre dynamique



1
votes

Dans Xcode 10.2, vous pouvez utiliser Container View pour implémenter l'interface utilisateur que vous avez décrite. Faites glisser et déposez un objet de vue conteneur sur le contrôleur de vue requis dans votre scène de storyboard:

 vue conteneur

 un contrôleur de vue avec un objet de vue conteneur

Ajoutez ensuite l'instance UITableViewController à votre scène de storyboard:

 UITableViewController

Définissez des cellules statiques pour son contenu :

 Static Cells

Ensuite, faites un clic droit sur Affichage du contenu que vous avez ajouté à l'une des étapes précédentes, et configurez-le comme décrit dans les captures d'écran suivantes:

 Configurer la vue conteneur 1 Configurer la vue conteneur 2 Configurer Container View 3

La configuration contraint et le contenu des cellules. Ensuite, vous verrez quelque chose comme ça sur votre appareil de test:

 Exécution sur l'appareil


0 commentaires