¿Cómo puedo configurar un UITableView en estilo agrupado?


91

Tengo una UITableViewControllersubclase con secciones. Las secciones se muestran con el estilo predeterminado (sin esquinas redondeadas). ¿Cómo puedo configurar el estilo TableView para agrupar en el código? No estoy usando Interface Builder para esto, así que necesito algo como

[self.tableView setGroupedStyle]

Busqué en Stack Overflow, pero no pude encontrar una respuesta.


Versión rápida: Link
Juan Boero

Respuestas:


108

Si entiendo lo que quieres decir, tienes que inicializar tu controlador con ese estilo. Algo como:

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

3
Como se dijo, no es una propiedad que se pueda cambiar. Uno agrupado siempre agrupado.
Corey Floyd

Esta no es una respuesta correcta, no está resolviendo el problema de tener una subclase UITableViewController. Si hereda UITableViewController, debe anular el constructor y no crear otro UITableView o UITableViewController.
Mikael

¿Cómo haría esto si es un controlador de subclase, como se indica en la pregunta?
Ethan Zhao

132

Puede hacer lo siguiente:

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

Swift 3:

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

12
¡ESTA ES LA VERDADERA SOLUCIÓN! GRACIAS. La respuesta aceptada es incorrecta, al menos para OS 3.0+
Duck

4
Tenga en cuenta que hubo un error tipográfico en la solución aceptada. Lo he arreglado ahora. Ambas respuestas funcionan para mí, pero crean instancias de cosas diferentes. Esta respuesta es a UITableView, la respuesta aceptada es a UITableViewController.
nevan king

3
En realidad, la respuesta aceptada es engañosa. Lea lo que dijo el OP "Tengo una subclase UITableViewConotroller". La respuesta aceptada SOLO le da un UITableViewController simple de Jane; sin conocer los detalles es imposible resolver el problema de los usuarios con respecto a la subclase. Esta respuesta y el uso de self.myTable probablemente sería mejor, en mi humilde opinión.
Feloneous Cat

Esto también funciona con restricciones en iOS8 (no sé sobre iOS7) ... simplemente inicialice con un marco de CGRectZerojunto con su estilo de vista de tabla y luego agregue sus restricciones y obtendrá el estilo correcto junto con sus restricciones.
Glen Selle

20

Te doy mi solución, estoy trabajando en "modo XIB", aquí el código de una subclase de un UITableViewController:

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

6
Advertencia a esta solución: si está bajo un navigationController en el NIB, perderá esa referencia y lo confundirá mucho.
Jesse Millikan

14

Debajo del código funcionó para mí, también estoy usando la clase UITableview

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

     if (self)
    {

     }
    return self;
}

1
Esta es la solución adecuada para las personas que utilizan una subclase de UITableViewController. ¡Gracias!
Chad Pavliska

11

Si está heredando UITableViewController, puede simplemente iniciar tableView nuevamente.

C objetivo:

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

Rápido:

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

6

Establecer eso no es tan difícil como se menciona en la pregunta. De hecho, es bastante simple. Prueba esto en el guión gráfico.

ingrese la descripción de la imagen aquí


Si ya tiene un tableView como parte de un TableViewController, esta configuración es la mejor. Otras respuestas se centran más en crear una nueva instancia de tableView, etc.
Karthik Kannan

3

Rápido 4

Usando TableView normal

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

Uso de TPKeyboardAvoidingTableView

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

3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)

2

Para configurar el estilo agrupado en la propia interfaz de usuario: -Seleccione TableView y luego cambie el "estilo" (en el inspector de atributos)) de simple a Agrupado.


2

También puede hacer esto si desea usarlo en una subclase que ya ha creado en un archivo rápido separado (probablemente no sea 100% correcto pero funciona)

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

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

Ahora en tu appdelegate.swift puedes llamar a:

let settingsController = SettingsViewController(style: .Grouped)

1

Puedes hacer esto usando storyboard / XIB también

  1. Ir al guión gráfico -> Seleccione su viewController -> Seleccione su mesa
  2. Seleccione la propiedad "Estilo" en el generador de interfaces
  3. Seleccione el "Agrupado"
  4. Hecho

0

Si tiene un TableView para más tablas, y una de estas tablas está agrupada y la otra es simple, puede simular el estilo simple con la función de UITableViewDelegate:

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

0

rápido 4

si no desea utilizar el guión gráfico, esto podría ser de ayuda.

puede agregar vista de tabla y establecer propiedades en un cierre:

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

luego agregue una subvista y establezca restricciones.


-5

También puede intentar aclarar el color de la línea de separación, lo que podría dar el efecto de estilo agrupado:

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

Las secciones no colapsarán de esta manera.
brduca

-11

Puedes usar:

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

-28
self.tableView.style = UITableViewStyleGrouped

EDITAR:

Había asumido que se trataba de una propiedad de lectura / escritura. En ese caso, puede seguir los consejos de Dimitris y establecer el estilo cuando crea una instancia del controlador, o (si está usando un XIB), puede configurarlo a través de IB.


Gracias por la respuesta. No estoy usando un XIB, tengo un controlador de pestañas con una subvista que es mi clase personalizada. No estoy seguro de dónde puedo poner la llamada initWithStyle, no busco el init de TableView, lo hace el controlador de pestañas. Cambiar initWithStyle en TableViewController no parece funcionar.
nevan king

Como dijo dimitris, si no está utilizando un XIB, debe iniciar el UITableViewController en algún lugar . Ahí es donde desea utilizar la llamada initWithStyle:.
sorteo el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.