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.

roi nevan
la source
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];
Dimitris
la source
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)
Lior
la source
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;
}
Thomas Decaux
la source
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;
}
Gagan Joshi
la source
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)
DZoki019
la source
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

Fangming
la source
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)
Md. Ibrahim Hassan
la source
3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)
Juan Boero
la source
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.

Zeesha
la source
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)
Jordi Bruin
la source
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é
Anny
la source
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
}
Illya Krit
la source
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.

Moraei
la source
-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]];
MyCSharpCorner
la source
Les sections ne s'effondreront pas de cette façon.
brduca
-11

Vous pouvez utiliser:

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}
Jyoti Kumari
la source
-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.

drewh
la source
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