Comment puis-je définir un UITableView sur un style groupé


89

J'ai une UITableViewControllersous - classe avec des sections. Les sections s'affichent avec le style par défaut (pas de coins arrondis). Comment puis-je définir le style TableView sur groupé dans le code? Je n'utilise pas Interface Builder pour cela, j'ai donc besoin de quelque chose comme

[self.tableView setGroupedStyle]

J'ai cherché sur Stack Overflow, mais je n'ai pas pu trouver de réponse.


Version Swift: Link
Juan Boero

Réponses:


107

Si je comprends ce que vous voulez dire, vous devez initialiser votre contrôleur avec ce style. Quelque chose comme:

myTVContoller = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];

3
Comme indiqué, ce n'est pas une propriété qui peut être modifiée. Un groupé toujours groupé.
Corey Floyd

Ce n'est pas une réponse correcte, cela ne résout pas le problème d'avoir une sous-classe UITableViewController. Si vous héritez de UITableViewController, vous devez remplacer le constructeur et ne pas créer un autre UITableView ou UITableViewController.
Mikael

Comment feriez-vous cela s'il s'agit d'un contrôleur sous-classé, comme indiqué dans la question?
Ethan Zhao

130

Vous pouvez faire ce qui suit:

UITableView *myTable = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

Swift 3:

let tableView = UITableView.init(frame: CGRect.zero, style: .grouped)

12
CECI EST LA VRAIE SOLUTION! MERCI. La réponse acceptée est fausse, au moins pour OS 3.0+
Canard

4
Veuillez noter qu'il y avait une faute de frappe dans la solution acceptée. Je l'ai réparé maintenant. Les deux réponses fonctionnent pour moi, mais elles instancient des choses différentes. Cette réponse est a UITableView, la réponse acceptée est a UITableViewController.
nevan king

3
En fait, la réponse acceptée est trompeuse. Veuillez lire ce que l'OP a dit "J'ai une sous-classe UITableViewConotroller". La réponse acceptée UNIQUEMENT vous donne un simple jane UITableViewController; sans connaître les détails, il est impossible de résoudre le problème des utilisateurs concernant la sous-classe. Cette réponse et l'utilisation de self.myTable serait probablement mieux, à mon humble avis.
Feloneous Cat

Cela fonctionne également avec des contraintes sur iOS8 (je ne sais pas pour iOS7) ... initialisez simplement avec un cadre CGRectZeroavec votre style de vue de table, puis ajoutez vos contraintes et vous obtenez le bon style avec vos contraintes.
Glen Selle

20

Je vous donne ma solution, je travaille en "mode XIB", voici le code d'une sous-classe d'un UITableViewController:

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    return self;
}

6
Attention à cette solution - si c'est sous un navigationController dans le NIB, il perdra cette référence et vous rendra vraiment confus.
Jesse Millikan

14

Ci-dessous le code a fonctionné pour moi, j'utilise également la classe UITableview

- (id)initWithStyle:(UITableViewStyle)style
{
     self = [super initWithStyle:UITableViewStyleGrouped];

     if (self)
    {

     }
    return self;
}

1
C'est la bonne solution pour les personnes utilisant une sous-classe de UITableViewController. Merci!
Chad Pavliska

9

Si vous héritez de UITableViewController, vous pouvez simplement relancer tableView.

Objectif c:

self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

Rapide:

self.tableView = UITableView(frame: CGRect.zero, style: .grouped)

6

Réglage qui n'est pas si difficile que mentionné dans la question. En fait, c'est assez simple. Essayez ceci sur le storyboard.

entrez la description de l'image ici


Si vous avez déjà une tableView dans le cadre d'un TableViewController, la configuration de cette façon est la meilleure. D'autres réponses se concentrent davantage sur l'instanciation d'une nouvelle tableView, etc.
Karthik Kannan

3

Swift 4

Utilisation de TableView normale

let tableView = TableView(frame: .zero, style: .grouped)

Utilisation de TPKeyboardAvoidingTableView

let tableView = TPKeyboardAvoidingTableView(frame: .zero, style: .grouped)

3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)

2

Pour définir le style groupé dans l'interface utilisateur elle-même: -Sélectionnez la TableView puis changez le "style" (dans l'inspecteur d'attributs)) de plain à Grouped.


2

Vous pouvez également le faire si vous souhaitez l'utiliser sur une sous-classe que vous avez déjà créée dans un fichier swift séparé (probablement pas 100% correct mais fonctionne)

override init(style: UITableViewStyle) {
    super.init(style: style)
    UITableViewStyle.Grouped
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

Maintenant, dans votre appdelegate.swift, vous pouvez appeler:

let settingsController = SettingsViewController(style: .Grouped)

1

Vous pouvez également le faire en utilisant Storyboard / XIB

  1. Aller au storyboard -> Sélectionnez votre vueContrôleur -> Sélectionnez votre table
  2. Sélectionnez la propriété "Style" dans interface-builder
  3. Sélectionnez le "Groupé"
  4. Terminé

0

Si vous avez un TableView pour plusieurs tables, et que l'une de ces tables est groupée et l'autre simple, vous pouvez simuler le style simple avec la fonction de UITableViewDelegate:

override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {   
    return CGFloat.min
}

0

rapide 4

si vous ne voulez pas utiliser de storyboard, cela pourrait être utile.

vous pouvez ajouter une vue de table et définir des propriétés dans une fermeture:

lazy var tableView: UITableView = {
        let tableView = UITableView(frame: .zero, style: .grouped)

        tableView.backgroundColor = UIColor(named: Palette.secondaryLight.rawValue)
        tableView.rowHeight = 68
        tableView.separatorStyle = .none
        tableView.translatesAutoresizingMaskIntoConstraints = false
        return tableView
    }()

puis ajoutez une sous-vue et définissez des contraintes.


-5

Vous pouvez également essayer de rendre la couleur de la ligne de séparation claire, ce qui pourrait donner un effet de style groupé:

[myTVContoller.tableView setSeparatorColor:[UIColor clearColor]];

Les sections ne s'effondreront pas de cette façon.
brduca

-11

Vous pouvez utiliser:

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}

-27
self.tableView.style = UITableViewStyleGrouped

ÉDITER:

Avait supposé qu'il s'agissait d'une propriété en lecture / écriture. Dans ce cas, vous pouvez soit suivre les conseils de Dimitris et définir le style lorsque vous instanciez le contrôleur, soit (si vous utilisez un XIB), vous pouvez le définir via IB.


Merci pour la réponse. Je n'utilise pas de XIB, j'ai un contrôleur d'onglets avec une sous-vue qui est ma classe personnalisée. Je ne sais pas où je peux placer l'appel initWithStyle, je ne suis pas en train de faire l'init TableView, c'est fait par le contrôleur d'onglet. La modification de initWithStyle dans le TableViewController ne semble pas fonctionner.
nevan king

Comme l'a dit dimitris, si vous n'utilisez pas de XIB, vous devez lancer UITableViewController quelque part . C'est là que vous souhaitez utiliser l'appel initWithStyle:.
tirage le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.