Come posso impostare un UITableView su uno stile raggruppato


89

Ho una UITableViewControllersottoclasse con sezioni. Le sezioni vengono visualizzate con lo stile predefinito (senza angoli arrotondati). Come posso impostare lo stile TableView su raggruppato nel codice? Non sto usando Interface Builder per questo, quindi ho bisogno di qualcosa di simile

[self.tableView setGroupedStyle]

Ho cercato Stack Overflow, ma non sono riuscito a trovare una risposta.


Versione rapida: Link
Juan Boero

Risposte:


107

Se capisco cosa intendi, devi inizializzare il controller con quello stile. Qualcosa di simile a:

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

3
Come detto non è una proprietà che può essere modificata. Uno raggruppato sempre raggruppato.
Corey Floyd,

Questa non è una risposta corretta, non risolve il problema di avere una sottoclasse UITableViewController. Se erediti UITableViewController, devi sovrascrivere il costruttore e non creare un altro UITableView o UITableViewController.
Mikael

Come lo faresti se si tratta di un controller sottoclasse, come indicato nella domanda?
Ethan Zhao,

130

Puoi fare quanto segue:

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

Swift 3:

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

12
QUESTA È LA VERA SOLUZIONE! GRAZIE. La risposta accettata è sbagliata, almeno per OS 3.0+
Duck

4
Tieni presente che c'era un errore di battitura nella soluzione accettata. L'ho risolto ora. Entrambe le risposte funzionano per me, ma istanziano cose diverse. Questa risposta è a UITableView, la risposta accettata è a UITableViewController.
nevan king

3
In realtà, la risposta accettata è fuorviante. Si prega di leggere cosa ha detto l'OP "Ho una sottoclasse UITableViewConotroller". La risposta accettata SOLO ti dà un UITableViewController normale; senza conoscere i dettagli è impossibile risolvere il problema degli utenti riguardo alla sottoclasse. Questa risposta e l'utilizzo di self.myTable sarebbero probabilmente migliori, IMHO.
Feloneous Cat

Funziona anche con i vincoli su iOS8 (non so su iOS7) ... basta inizializzare con una cornice CGRectZeroinsieme al tuo stile tableview e quindi aggiungere i tuoi vincoli e otterrai lo stile giusto insieme ai tuoi vincoli.
Glen Selle

20

Ti do la mia soluzione, sto lavorando in "modalità XIB", qui il codice di una sottoclasse di un UITableViewController:

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

6
Avvertenza per questa soluzione: se questo è sotto un navigationController nel NIB, perderà quel riferimento e ti renderà davvero confuso.
Jesse Millikan

14

Sotto il codice Ha funzionato per me, sto anche usando la classe UITableview

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

     if (self)
    {

     }
    return self;
}

1
Questa è la soluzione giusta per le persone che utilizzano una sottoclasse di UITableViewController. Grazie!
Chad Pavliska

9

Se stai ereditando UITableViewController, puoi semplicemente inizializzare nuovamente tableView.

Obiettivo C:

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

Swift:

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

6

L'impostazione non è così difficile come menzionato nella domanda. In realtà è piuttosto semplice. Prova questo su storyboard.

inserisci qui la descrizione dell'immagine


Se hai già un tableView come parte di un TableViewController, impostarlo in questo modo è il migliore. Altre risposte si concentrano maggiormente sulla creazione di un'istanza di un nuovo tableView, ecc.
Karthik Kannan

3

Swift 4

Utilizzo di TableView normale

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

Utilizzando TPKeyboardAvoidingTableView

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

3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)

2

Per impostare lo stile raggruppato nell'interfaccia utente stessa: -Seleziona TableView quindi cambia lo "stile" (nell'ispettore attributi)) da normale a raggruppato.


2

Puoi anche farlo se vuoi usarlo su una sottoclasse che hai già creato in un file swift separato (probabilmente non è corretto al 100% ma funziona)

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

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

Ora in appdelegate.swift puoi chiamare:

let settingsController = SettingsViewController(style: .Grouped)

1

Puoi farlo anche usando storyboard / XIB

  1. Vai allo storyboard -> Seleziona il tuo viewController -> Seleziona la tua tabella
  2. Seleziona la proprietà "Stile" nel generatore di interfacce
  3. Seleziona "Raggruppato"
  4. Fatto

0

Se hai un TableView per più tabelle e una di queste tabelle è raggruppata e l'altra semplice, puoi simulare lo stile semplice con la funzione da UITableViewDelegate:

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

0

rapido 4

se non vuoi usare lo storyboard, questo potrebbe essere d'aiuto.

puoi aggiungere la vista tabella e impostare le proprietà in una chiusura:

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

quindi aggiungi la sottoview e imposta i vincoli.


-5

Puoi anche provare a rendere chiaro il colore della linea di separazione che potrebbe dare l'effetto di stile raggruppato:

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

Le sezioni non verranno compresse in questo modo.
brduca

-11

Puoi usare:

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

-27
self.tableView.style = UITableViewStyleGrouped

MODIFICARE:

Aveva pensato che fosse una proprietà di lettura / scrittura. In tal caso, puoi seguire i consigli di Dimitris e impostare lo stile quando installi il controller o (se stai usando un XIB), puoi impostarlo tramite IB.


Grazie per la risposta. Non sto usando un XIB, ho un controller a schede con una sottoview che è la mia classe personalizzata. Non sono sicuro di dove posso mettere la chiamata initWithStyle, non sto cercando l'init TableView, è fatto dal controller della scheda. La modifica di initWithStyle nel TableViewController non sembra funzionare.
nevan king,

Come ha detto dimitris, se non stai usando un XIB, devi avviare l'UITableViewController da qualche parte . È qui che vuoi usare la chiamata initWithStyle:.
disegnato il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.