Wie kann ich eine UITableView auf einen gruppierten Stil einstellen?


89

Ich habe eine UITableViewControllerUnterklasse mit Abschnitten. Die Abschnitte werden mit dem Standardstil angezeigt (keine abgerundeten Ecken). Wie kann ich den TableView-Stil so einstellen, dass er im Code gruppiert ist? Ich benutze dafür nicht Interface Builder, also brauche ich so etwas

[self.tableView setGroupedStyle]

Ich habe nach Stack Overflow gesucht, konnte aber keine Antwort finden.


Schnelle Version: Link
Juan Boero

Antworten:


107

Wenn ich verstehe, was Sie meinen, müssen Sie Ihren Controller mit diesem Stil initialisieren. Etwas wie:

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

3
Wie bereits erwähnt, kann keine Eigenschaft geändert werden. Eine Gruppe immer gruppiert.
Corey Floyd

Dies ist keine korrekte Antwort, sondern löst nicht das Problem einer UITableViewController-Unterklasse. Wenn Sie UITableViewController erben, müssen Sie den Konstruktor überschreiben, um keinen weiteren UITableView oder UITableViewController zu erstellen.
Mikael

Wie würden Sie dies tun, wenn es sich um einen Controller mit Unterklassen handelt, wie in der Frage angegeben?
Ethan Zhao

130

Sie können Folgendes tun:

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

Swift 3:

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

12
DAS IST DIE ECHTE LÖSUNG! VIELEN DANK. Die akzeptierte Antwort ist falsch, zumindest für OS 3.0+
Duck

4
Bitte beachten Sie, dass die akzeptierte Lösung einen Tippfehler enthielt. Ich habe es jetzt behoben. Beide Antworten funktionieren für mich, aber sie instanziieren unterschiedliche Dinge. Diese Antwort ist a UITableView, die akzeptierte Antwort ist a UITableViewController.
Nevan King

3
Tatsächlich ist die akzeptierte Antwort irreführend. Bitte lesen Sie, was das OP sagte "Ich habe eine UITableViewConotroller-Unterklasse". Die akzeptierte Antwort gibt Ihnen NUR einen einfachen Jane UITableViewController; Ohne Kenntnis der Details ist es unmöglich, das Benutzerproblem in Bezug auf die Unterklasse zu lösen. Diese Antwort und die Verwendung von self.myTable wären meiner Meinung nach wahrscheinlich besser.
Feloneous Cat

Dies funktioniert auch mit Einschränkungen unter iOS8 (Sie wissen nichts über iOS7). Initialisieren Sie einfach mit einem Rahmen CGRectZerozusammen mit Ihrem Tabellenansichtsstil und fügen Sie dann Ihre Einschränkungen hinzu, und Sie erhalten den richtigen Stil zusammen mit Ihren Einschränkungen.
Glen Selle

20

Ich gebe Ihnen meine Lösung, ich arbeite im "XIB-Modus", hier der Code einer Unterklasse eines UITableViewController:

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

6
Vorsichtsmaßnahme für diese Lösung - Wenn sich diese unter einem Navigationscontroller in der NIB befindet, verliert sie diese Referenz und macht Sie wirklich verwirrt.
Jesse Millikan

14

Unten Code Für mich funktioniert, ich verwende auch die UITableview-Klasse

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

     if (self)
    {

     }
    return self;
}

1
Dies ist die richtige Lösung für Benutzer einer Unterklasse von UITableViewController. Vielen Dank!
Chad Pavliska

9

Wenn Sie UITableViewController erben, können Sie tableView einfach erneut starten.

Ziel c:

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

Schnell:

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

6

Das einzustellen ist nicht so schwer wie in der Frage erwähnt. Eigentlich ist es ziemlich einfach. Versuchen Sie dies auf dem Storyboard.

Geben Sie hier die Bildbeschreibung ein


Wenn Sie bereits eine tableView als Teil einer TableViewController-Einstellung haben, ist dies am besten. Andere Antworten konzentrieren sich mehr auf das Instanziieren einer neuen Tabellenansicht usw.
Karthik Kannan

3

Swift 4

Verwenden von Normal TableView

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

Verwenden von TPKeyboardAvoidingTableView

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

3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)

2

So legen Sie den gruppierten Stil in der Benutzeroberfläche selbst fest: - Wählen Sie die Tabellenansicht aus und ändern Sie den "Stil" (im Attributinspektor) von "Einfach" in "Gruppiert".


2

Sie können dies auch tun, wenn Sie es für eine Unterklasse verwenden möchten, die Sie bereits in einer separaten schnellen Datei erstellt haben (wahrscheinlich nicht 100% korrekt, funktioniert aber).

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

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

Jetzt können Sie in appdelegate.swift Folgendes aufrufen:

let settingsController = SettingsViewController(style: .Grouped)

1

Sie können dies auch mit Storyboard / XIB tun

  1. Gehen Sie zum Storyboard -> Wählen Sie Ihren viewController aus -> Wählen Sie Ihre Tabelle aus
  2. Wählen Sie im Interface-Builder die Eigenschaft "Style"
  3. Wählen Sie die "Gruppiert"
  4. Getan

0

Wenn Sie eine TableView für mehr Tabellen haben und eine dieser Tabellen gruppiert und die andere einfach ist, können Sie den einfachen Stil mit der Funktion von UITableViewDelegate simulieren:

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

0

schnell 4

Wenn Sie kein Storyboard verwenden möchten, kann dies hilfreich sein.

Sie können eine Tabellenansicht hinzufügen und Eigenschaften in einem Abschluss festlegen:

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
    }()

Fügen Sie dann die Unteransicht hinzu und legen Sie die Einschränkungen fest.


-5

Sie können auch versuchen, die Farbe der Trennlinie klar zu machen, wodurch der gruppierte Stileffekt erzielt werden kann:

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

Abschnitte werden auf diese Weise nicht zusammenfallen.
Brduca

-11

Sie können verwenden:

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

-27
self.tableView.style = UITableViewStyleGrouped

BEARBEITEN:

Hatte angenommen, dass dies eine Lese- / Schreibeigenschaft war. In diesem Fall können Sie entweder den Ratschlägen von Dimitris folgen und den Stil festlegen, wenn Sie den Controller instanziieren, oder (wenn Sie ein XIB verwenden) über IB festlegen.


Danke für die Antwort. Ich verwende kein XIB, sondern einen Tab-Controller mit einer Unteransicht, die meine benutzerdefinierte Klasse ist. Ich bin mir nicht sicher, wo ich den initWithStyle-Aufruf platzieren kann. Ich bin nicht mit dem TableView-Init beschäftigt, er wird vom Tab-Controller ausgeführt. Das Ändern des initWithStyle im TableViewController scheint nicht zu funktionieren.
Nevan King

Wie Dimitris sagte, müssen Sie den UITableViewController irgendwo initiieren, wenn Sie kein XIB verwenden . Hier möchten Sie den Aufruf initWithStyle: verwenden.
Drawh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.