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

rey nevan
fuente
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];
Dimitris
fuente
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)
Lior
fuente
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;
}
Thomas Decaux
fuente
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;
}
Gagan Joshi
fuente
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)
DZoki019
fuente
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í

Colmillos
fuente
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)
Md. Ibrahim Hassan
fuente
3

Swift 4+:

let myTableViewController = UITableViewController(style: .grouped)
Juan Boero
fuente
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.

Zeesha
fuente
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)
Jordi Bruin
fuente
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
Anny
fuente
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
}
Illya Krit
fuente
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.

moraei
fuente
-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]];
MyCSharpCorner
fuente
Las secciones no colapsarán de esta manera.
brduca
-11

Puedes usar:

(instancetype)init {
return [[YourSubclassOfTableView alloc] initWithStyle:UITableViewStyleGrouped];
}
Jyoti Kumari
fuente
-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.

dibujar
fuente
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