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.


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];

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)

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;
}

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;
}

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)

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


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)

3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)

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.


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)

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

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
}

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.


-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]];

As seções não entrarão em colapso dessa maneira.
brduca

-11

Você pode usar:

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

-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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.