Como posso definir um UITableView para um estilo agrupado

89

eu tenho um UITableViewController subclasse com seções. As seções são exibidas com o estilo padrão (sem cantos arredondados). Como posso definir o estilo TableView para agrupado no código? Não estou usando o Interface Builder para isso, então preciso de algo como

[self.tableView setGroupedStyle]

Eu pesquisei no Stack Overflow, mas não consegui encontrar uma resposta.

Nevan King
fonte
Versão Swift: Link
Juan Boero

Respostas:

107

Se eu entendi o que você quer dizer, você tem que inicializar seu controlador com esse estilo. Algo como:

myTVContoller = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
Dimitris
fonte
3
Conforme declarado, não é uma propriedade que pode ser alterada. Um agrupado sempre agrupado.
Corey Floyd
Esta não é uma resposta correta, não está resolvendo o problema de ter uma subclasse UITableViewController. Se você herdar UITableViewController, terá que substituir o construtor e não criar outro UITableView ou UITableViewController.
Mikael
Como você faria isso se fosse um controlador de subclasse, conforme declarado na pergunta?
Ethan Zhao
130

Você pode fazer o seguinte:

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

Swift 3:

let tableView = UITableView.init(frame: CGRect.zero, style: .grouped)
Lior
fonte
12
ESTA É A REAL SOLUÇÃO! OBRIGADO. A resposta aceita está errada, pelo menos para OS 3.0+
Duck
4
Observe que ocorreu um erro de digitação na solução aceita. Eu consertei agora. Ambas as respostas funcionam para mim, mas instanciam coisas diferentes. Essa resposta é a UITableView, a resposta aceita é a UITableViewController.
Nevan King de
3
Na verdade, a resposta aceita é enganosa. Por favor, leia o que o OP disse "Eu tenho uma subclasse UITableViewConotroller". A resposta aceita SOMENTE dá a você um UITableViewController simples; sem saber os detalhes é impossível resolver o problema do usuário em relação à subclasse. Esta resposta e usar self.myTable provavelmente seria melhor, IMHO.
Feloneous Cat
Isso também funciona com restrições no iOS8 (não sei sobre iOS7) ... apenas inicialize com um quadro de CGRectZerojunto com seu estilo tableview e, em seguida, adicione suas restrições e você obterá o estilo certo junto com suas restrições.
Glen Selle
20

Eu te dou minha solução, estou trabalhando no "modo XIB", aqui o código de uma subclasse de um UITableViewController:

-(id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithStyle:UITableViewStyleGrouped];
    return self;
}
Thomas Decaux
fonte
6
Advertência para esta solução - se estiver em um navigationController no NIB, perderá essa referência e deixará você realmente confuso.
Jesse Millikan
14

Abaixo do código funcionou para mim, também estou usando a classe UITableview

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

     if (self)
    {

     }
    return self;
}
Gagan Joshi
fonte
1
Esta é a solução certa para pessoas que usam uma subclasse de UITableViewController. Obrigado!
Chad Pavliska
9

Se você está herdando UITableViewController, pode simplesmente iniciar o tableView novamente.

Objetivo C:

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

Rápido:

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

Definir isso não é tão difícil como mencionado na pergunta. Na verdade, é muito simples. Experimente isso no storyboard.

insira a descrição da imagem aqui

Fangming
fonte
Se você já tiver um tableView como parte de um TableViewController, configurá-lo desta forma é o melhor. Outras respostas se concentram mais em instanciar uma nova tableView etc.
Karthik Kannan
3

Swift 4

Usando Normal TableView

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

Usando TPKeyboardAvoidingTableView

let tableView = TPKeyboardAvoidingTableView(frame: .zero, style: .grouped)
Md. Ibrahim Hassan
fonte
3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)
Juan Boero
fonte
2

Para definir o estilo agrupado na própria interface do usuário: -Selecione TableView e altere o "estilo" (no inspetor de atributos) de simples para Agrupado.

Zeesha
fonte
2

Você também pode fazer isso se quiser usá-lo em uma subclasse já criada em um arquivo swift separado (provavelmente não 100% correto, mas funciona)

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

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

Agora em seu appdelegate.swift você pode chamar:

let settingsController = SettingsViewController(style: .Grouped)
Jordi Bruin
fonte
1

Você pode fazer isso usando storyboard / XIB também

  1. Vá para o storyboard -> Selecione seu viewController -> Selecione sua mesa
  2. Selecione a propriedade "Estilo" no construtor de interface
  3. Selecione o "Agrupado"
  4. Feito
Anny
fonte
0

Se você tiver uma TableView para mais tabelas, e uma dessas tabelas estiver agrupada e a outra simples, então você pode simular o estilo simples com a função de UITableViewDelegate:

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

rápido 4

se você não quiser usar o storyboard, isso pode ajudar.

você pode adicionar visualização de tabela e definir propriedades em um fechamento:

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

em seguida, adicione a subvisualização e defina as restrições.

Moraei
fonte
-5

Você também pode tentar deixar a cor da linha separadora clara, o que pode dar o efeito de estilo agrupado:

[myTVContoller.tableView setSeparatorColor:[UIColor clearColor]];
MyCSharpCorner
fonte
As seções não entrarão em colapso dessa maneira.
brduca
-11

Você pode usar:

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}
Jyoti Kumari
fonte
-27
self.tableView.style = UITableViewStyleGrouped

EDITAR:

Presumiu que esta era uma propriedade de leitura / gravação. Nesse caso, você pode seguir o conselho de Dimitris e definir o estilo ao instanciar o controlador ou (se estiver usando um XIB), pode defini-lo via IB.

desenhou
fonte
Obrigado pela resposta. Não estou usando um XIB, tenho um controlador de guia com uma subvisão que é minha classe personalizada. Não tenho certeza de onde posso colocar a chamada initWithStyle, não estou colocando o init TableView, é feito pelo controlador de guia. Alterar o initWithStyle no TableViewController não parece funcionar.
nevan king
Como Dimitris disse, se você não está usando um XIB, deve inicializar o UITableViewController em algum lugar . É onde você deseja usar a chamada initWithStyle :.
desenhou em