En el video WWDC 2013, Apple sugiere mostrar el selector en su lugar en una vista de tabla en iOS 7. ¿Cómo insertar y animar una vista entre celdas de vista de tabla?
Así, desde la aplicación de calendario de Apple:
En el video WWDC 2013, Apple sugiere mostrar el selector en su lugar en una vista de tabla en iOS 7. ¿Cómo insertar y animar una vista entre celdas de vista de tabla?
Así, desde la aplicación de calendario de Apple:
Respuestas:
Con iOS7, Apple lanzó el código de muestra
DateCell
.Puede descargar el código de muestra aquí: DateCell .
fuente
Puede usar la respuesta que había dado anteriormente a continuación o usar esta nueva clase en Swift que hice para hacer esta tarea mucho más simple y limpia: https://github.com/AaronBratcher/TableViewHelper
Me parece que el código proporcionado por Apple es problemático de dos maneras:
Para las tablas de celdas estáticas, defino mi celda de selección de fecha debajo de mi celda de visualización de fecha y tengo un indicador que identifica si la estoy editando. Si lo estoy, devuelvo una altura de celda adecuada, de lo contrario devuelvo una altura de celda de cero.
Cuando se hace clic en la fila que muestra la fecha, cambio la bandera y hago la animación de actualización para mostrar el selector.
Si tengo múltiples selectores de fecha / hora en la misma tabla, configuro las banderas en consecuencia en el clic y vuelvo a cargar las filas apropiadas. Descubrí que puedo mantener mi tabla estática, usar mucho menos código y es más fácil entender lo que está sucediendo.
fuente
Usando el guión gráfico y una tabla estática pude lograr el mismo resultado usando el siguiente código. Esta es una gran solución porque si tiene muchas celdas de formas extrañas o desea tener múltiples celdas que se muestran / ocultan dinámicamente, este código seguirá funcionando.
fuente
[tableView reloadData];
llamada no es obligatoria. Actualmente deshabilita la selección de filas, pero es mejor anular la selección de esta manera:[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
Tomé la fuente DateCell de Apple y eliminé el archivo del guión gráfico.
Si desea uno sin storyboard, eche un vistazo a: https://github.com/ajaygautam/DateCellWithoutStoryboard
fuente
UIDatePicker
porUIPickerView
. Intenté algunas cosas y pude mostrarpickerView
en cada celda, pero no se actualiza con cada celda. He publicado mi pregunta y código aquí . Eche un vistazo y sería muy amable si pudiera sugerirme una solución.UIDatePicker
conUIPickerView
pero con par de errores. 1. Se bloquea al abrirUIPickerView
y desplazar la tabla. 2. Asigna automáticamente el valor aUILabel
Detalle en las filas inferiores de la tabla cuando los valores se asignan a la etiqueta Detalles en las filas superiores. Aquí está mi códigoUno de los mejores tutoriales sobre esto es UIDatePicker en línea de iOS 7 - Parte 2 . Básicamente, aquí uso celdas de vista de tabla estática e implemento algunos métodos adicionales. Usé Xamarin y C # para esto:
Tienes que activarte
Clip Subviews
.Ajuste de la altura:
Que una variable de clase:
private bool datePickerIsShowing = false;
Mostrar selector de fecha:
Ocultar selector de fecha:
Y llamando a estas funciones:
fuente
He creado mi propio controlador de vista personalizado para simplificar el proceso de agregar un selector en línea en línea en una vista de tabla. Simplemente lo subclasifica y sigue algunas reglas simples y maneja la presentación del selector de fechas.
Puede encontrarlo aquí junto con un proyecto de ejemplo que muestra cómo usarlo: https://github.com/ale84/ALEInlineDatePickerViewController
fuente
Encontré una respuesta a una falla en el ejemplo de celda de fecha de apple donde debes tener una fila debajo de la última celda de fecha o obtienes un error. En el método CellForRowAtIndexPath, reemplace la línea ItemData con
Después de reemplazar el código de muestra, ahora puedo mostrar mostrar una celda datePicker sin tener una celda debajo.
Me acabo de unir a stackoverflow, así que si esto está en el lugar equivocado o en otro lugar, me disculpo.
fuente
La respuesta de Aaron Bratcher funcionó, excepto cuando se usa con varias secciones. Las animaciones fueron un poco entrecortadas y no deslizó muy bien las siguientes secciones. Para solucionar esto, recorrí el siguiente conjunto de secciones y traduje las filas en la misma cantidad que la altura del selector de fechas.
Edité didSelectRowAtIndexPath para:
fuente
Agregando a las respuestas anteriores,
Probé las soluciones @datinc y @Aaron Bratcher, ambas funcionaron muy bien, pero la animación no estaba tan limpia en una vista de tabla estática agrupada.
Después de jugar un poco, llegué a este código que funciona limpio y genial para mí:
El cambio principal es usar -
para actualizar la fila, de esta manera el resto de las secciones y celdas de la tabla no se animan.
Espero que ayude a alguien.
Shani
fuente
Agregando a las respuestas anteriores y la solución @Aaron Bratcher ...
Obtuve animaciones entrecortadas desde iOS 9, y la tabla tardaba un tiempo en cargarse, y lo suficiente como para ser molesta. Lo reduje a que los recolectores de fechas tardan en cargar desde el guión gráfico. Agregar los selectores mediante programación en lugar de en el guión gráfico mejoró el rendimiento de carga y, como subproducto, la animación es más fluida.
Elimine el selector de fecha del guión gráfico y tenga una celda vacía, que establece la altura como en las respuestas anteriores, y luego llame a una inicialización en viewDidLoad:
Luego implemente la acción, por ejemplo
Esto carga la tabla mucho más rápido que antes. También elimina la línea de animación,
didSelectRowAtIndexPath
ya que se anima sin problemas (ymmv).fuente
Usar esta respuesta sin la animación funciona correctamente en iOS 8.1. Lo he convertido en Swift a continuación:
fuente
Aquí hay otra forma de resolver el problema sin números constantes estáticos. Todas las celdas se pueden usar en vistas de tabla estáticas y dinámicas. ¡Este método usa una sola celda para el título y el selector de fecha!
Por cierto, ¡puedes tener tantos recolectores de fechas en tu mesa como desees!
Cree una subclase UITableViewCell :
Cree una clase CPDatePickerTableViewCell desde nuestro CPTableViewCell
En su controlador de vista, implemente estos dos métodos de delegado
Ejemplo de cómo configurar restricciones en el generador de interfaces
Además, he escrito clases de celdas personalizadas para UITextField y UITextView donde se llama a tableView: didSelectRowAtIndexPath: cuando se selecciona la celda.
CPTextFieldTableViewCell
CBTextViewTableViewCell
¡La altura de la celda es dinámica y la fila crecerá cuando el texto se ajuste a una nueva línea!
fuente
La forma más fácil de usar DateCell en la versión Swift: use este ejemplo .
Arrastre la clase " DateCellTableViewController.swift " a su proyecto.
Abra "Main.storyboard" y copie " DateCell " ViewController Object y péguelo en su storyboard.
fuente