2012-01-06 15 views
5

Cuando creo una vista de tabla estática y la pongo en un controlador de vista normal, aparece un error que dice que las vistas de tabla estáticas deben estar en UITableViewController.iOS Cómo agregar STABLE UITableView y otra vista al mismo controlador de vista

Lo que quiero es una vista en el iPad que tiene una vista de tabla estática que ocupa la mayor parte de la pantalla, pero una UIView estándar debajo que siempre permanece visible y tiene un par de etiquetas que actualizo basado en contenido de la vista de tabla.

¿Hay alguna manera de usar un UITableViewController y hacer que tableView no sea pantalla completa para que pueda agregarle una subvista en un guión gráfico?

Si no, ¿se puede hacer en el código?

¡Cualquier consejo sería apreciado!

Respuesta

0

La verdadera respuesta es crear un controlador de contenedor personalizado.

Por ejemplo, puede tener una vista de tabla estática dentro de un controlador de navegación. Por lo tanto, debe crear una clase de contenedor, como un controlador de navegación o cualquiera que sea el suyo, y agregue el controlador de vista de tabla estática a eso.

1

Puede lograr el mismo efecto utilizando UITableViewController y un UITableView estático. Cree la vista que desea en la parte inferior de la tabla y configure la propiedad tableFooterView en UITableView para que sea esa vista. Esto se puede hacer arrastrando un objeto UIView fuera de la biblioteca y agregándolo a la parte inferior de la vista de tabla (notará que el área inferior resaltada en azul para saber que lo está haciendo correctamente). Es posible que tenga que ajustar las inserciones de contenido para que muestre cómo desea.

+0

El pie de página solo está visible cuando estás en la parte inferior de la tabla, ¿correcto? Necesito que esta vista esté visible todo el tiempo. – lnafziger

+0

¡Gran solución! Puede agregar una UIView normal antes o después de una sección de vista de tabla que es básicamente lo mismo que integrarla al revés y realmente funciona. –

1

Tableta estática TableViews debe ser del tipo UITableViewController, pero puede lograr el mismo efecto utilizando un ViewController con TableView (o 2) y cuide el método cellForRowAtIndexPath para el televisor que desea que sea "Static Cell" . Simplemente cambie IndexPath.section y .row y cree la celda de la forma que desee. Más codificación segura, pero obtienes el mismo efecto y con más flexibilidad si no quieres hacerlo de la manera Estática de Apple.

+0

Sí, lamentablemente son MUCHAS filas, ¡así que estoy tratando de encontrar una mejor manera! – lnafziger

2

no estoy seguro si funciona, pero es posible que desee probar este enfoque también:

  1. Crear un UIViewController, por ejemplo, BaseViewController (tanto una clase como en Storyboard)
  2. Cree un UITableViewController, p. MyStaticTableViewController (solo en Storyboard y añádale un identificador)
  3. En Storyboard, agregue una instancia de UIView con las dimensiones adecuadas a su BaseViewcontroller, p. myStaticTableView.
  4. Programáticamente, agregue la vista de MyStaticTableViewController a myStaticTableView.
6

Lo que necesita es un UITableViewController normal (para que obtenga todo el comportamiento de la celda estática) y luego su vista como una subvista de la vista de tabla, pero administrada de manera que siempre se quede en la parte inferior de la pantalla. Apple demostró esto como WWDC. Esto es lo que hago (en mi ejemplo, tengo un UIDatePicker que siempre quiero anclado en la parte inferior):

En viewDidLoad, crear su punto de vista y añadirla como una vista secundaria de la vista de tabla. Colóquelo en la parte inferior de la vista de tabla.

[self.tableView addSubview:self.datePicker]; 
[self updateDatePickerBounds]; 

Implementar scrollViewDidScroll de modo que usted puede forzar su vista a la parte inferior de la pantalla nunca tiempo de la vista de tabla se desplaza:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    // Keep the date picker floating above the table view, anchored to the bottom of the view 
    [self updateDatePickerBounds]; 
} 

y luego implementar una función que posiciona a la vista correctamente:

- (void) updateDatePickerBounds 
{ 
    // Keep the date picker floating above the table view, anchored at the bottom 
    CGRect tableBounds = self.tableView.bounds; 
    CGRect pickerFrame = self.datePicker.frame; 
    pickerFrame = CGRectMake(tableBounds.origin.x, 
          tableBounds.origin.y + CGRectGetHeight(tableBounds) - CGRectGetHeight(pickerFrame), 
          tableBounds.size.width, 
          pickerFrame.size.height); 
    self.datePicker.frame = pickerFrame; 
} 

Por último, si no desea que su vista de tabla vaya por debajo de su vista inferior, simplemente configure la vista de tabla contentInset para que coincida con la h ocho de tu punto de vista.

También llamo a mi método updateDatePickerBounds de viewWillAppear. Olvidé por qué tuve que hacer eso.

+2

Sí, de eso estoy hablando: un UITableViewController configurado con células estáticas. Puede flotar una vista sobre la vista de tabla usando la técnica que describí. Lo he hecho varias veces –

+0

ACTUALIZACIÓN: En realidad, el mejor lugar para llamar a updateDatePickerBounds está en viewDidLayoutSubviews. Entonces no necesita anular scrollViewDidScroll. viewDidLayoutSubviews también se llama durante la rotación del dispositivo, por lo que las cosas se actualizarán también en ese caso. –

Cuestiones relacionadas