Botón en UITableViewCell que no responde bajo ios 7

Tengo una tabla de vista y cada celda contiene un botón. Funciona muy bien con todas las versiones de iOS, pero no sé lo que está sucediendo. La celda está construida en un archivo xib.

¿Alguien podría darme algunas sugerencias? Gracias por adelantado.

Lo que funcionó para mí es esto:

contentView.userInteractionEnabled = NO; 

llamada después de cargar mi celda personalizada desde el plumín. Parece que esta vista de contenido se crea y configura como una vista secundaria de nivel superior después de crear vistas definidas en el archivo de punta.

Llamar a [cell bringSubviewToFront:button] después de cargar la celda de la punta resolvió esto por mí.

También he luchado con este problema e investigué mucho sobre las diferentes respuestas en stackoverflow e internet, la solución es diferente dependiendo de la fuente del problema. En la mayoría de los casos, debe hacer lo siguiente con el elemento que se supone debe tomar la acción del usuario (tocar / clic, etc.):
myButton.userInteractionEnabled = YES;

Particularmente para UILabel / UIImageView, de forma predeterminada el indicador userInteractionEnabled es NO .

Si está cargando la vista desde un xib, debe asegurarse de que, desde la vista de celda personalizada, la vista de contenido y el elemento con el que desea habilitar la acción del usuario, todos tengan marcada la checkbox:
enter image description here

En el ejemplo anterior, DeviceViewCell , Content View y el elemento Button tienen activada la checkbox ” Interacción del usuario habilitada “.
Si la celda personalizada se implementa como una subclase de UITableViewCell, y la vista de celda personalizada se carga dinámicamente desde otro archivo xib, TIENE QUE HACER una cosa más que es confusa para la mayoría de las personas, pero explicaré por qué más adelante:
En el método de inicialización de la celda personalizada, debe hacer lo siguiente:
self.contentView.userInteractionEnabled = NO

donde self es la subclase de UITableViewCell que has creado. De nuevo, si la celda personalizada se implementa como una subclase de UITableViewCell, y la vista de celda personalizada se carga desde otro archivo xib DYNAMICALLY, debe hacer lo anterior. Aquí está la explicación:

self.contentView NO es la misma Content View que ve en Interface Builder, es creada por el sistema como la default content view que está en la parte superior de todas las demás vistas / elementos dentro de su vista de celda personalizada, y oscurece el rest de las vistas en la jerarquía de vista. Por lo tanto, deberá deshabilitar la interacción del usuario antes de que los elementos de la interfaz de usuario en la vista de celda personalizada puedan recibir eventos de interacción del usuario. Espero que esto ayude. Si tienes una mejor explicación, me encantaría escucharla :-). Nuevamente es mi observación y podría haber otras razones. ¡La discusión es bienvenida!

El problema es que su plumín no contiene un contentView, como se requiere desde iOS 8 SDK (estoy escribiendo por experiencia, no tengo una fuente viable, lo siento).

Cuando agrega un UITableViewController a un guión gráfico, se agrega una UITableViewCell a su UITableView automáticamente. Si echa un vistazo a este UITableView , verá un contentView en él.

Por lo tanto, cuando subclasifica una UITableViewCell y la crea con .xib, deberá hacer clic y arrastrar una UITableViewCell al xib en lugar de la UIView predeterminada . Entonces no olvides configurar la clase File Owner y la clase UITableViewCell en tu subclase.

Experimenté el mismo problema. Resultó que había creado un objeto UIView en IB y luego establecí su clase en una subclase de UITableViewCell.

Como el objeto que creé originalmente en IB era un UIView, el contentView de UITableViewCell no se agregó hasta el tiempo de ejecución, que resultó estar en la parte superior de mis UIButtons, lo que los hace no seleccionables.

Claramente, hay una serie de cosas que pueden salir mal y algunas correcciones funcionan en ciertas versiones de iOS y no en otras.

Mi problema era que tenía un UIButton que no era una subvista inmediata de cell.contentView (es decir, era una subvista de una subvista). Tuve que agregar mi botón directamente a cell.contentView para poder tocarlo. (iOS v8 +)

Esquema de mi celular

En mi caso, todo lo que me gustaría que el usuario interactúe está fuera de ContentView. Además, no quiero que la celda se resalte cuando se selecciona.

Todas las tags (Nombre, Categorías, etc.) se encuentran inmediatamente debajo de “Vista de contenido”. El WebsiteButton no se encuentra en “Vista de contenido”, sino que está en “Celda de tabla de directorio local”.

En mi método tableViewController tableView: cellForRowAtIndexPath: Tengo el siguiente código: cell.contentView.userInteractionEnabled = NO;

Eso es todo y el usuario puede interactuar con el botón. NO uso [cell bringSubviewToFront: cell.websiteButton];

La solución a este problema es;

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { cell.bringSubviewToFront(cell.YOUR_UIView) } 

Esto funciona para mí

Como han señalado otros, siempre agregue subvistas a la vista de contenido de la celda. Si ha reemplazado el método layoutSubviews , asegúrese de llamar a la implementación súper. Olvidar llamar a la súper implementación produce resultados inesperados.

Tuve el mismo problema con un UIButton en una celda prototipo en mi guión gráfico. Lo resolví marcando “Interacción del usuario habilitada” en la celda del prototipo. Esto funcionó en iOS 7.1.

He tenido el mismo problema La razón es

 self.contentView.Frame.size.height 

siempre es 44.

Hay una sugerencia de que puede establecer su self.contentView.Frame en self.frame en el método de sobreescritura – (void)layoutSubviews el problema se resolverá

El error más obvio que no he visto aquí es que DEBE tener unBackgroundImage seleccionado para que un UIButton se vea diferente cuando se selecciona. Estos no son como, por ejemplo, UITableViewCells.

 myButton.setBackgroundImage(UIImage(named: "ButtonBackgroundSelected.png"), forState: .Highlighted) 

En mi caso, necesito verificar la “Interacción del usuario habilitada” para la celda misma (no solo el contentView) también. Pero como se señaló en otras respuestas, puede haber varias razones por las que esto está sucediendo, así que estoy seguro de que esto no funcionará en todos los casos.

enter image description here

Me enfrenté a un problema similar en UITableViewCell y UICollectionViewCell. Pocos pasos a seguir:

  1. Siempre agregue subvistas a la vista de contenido de la vista de celda y NO a la vista de celda
  2. Si está agregando una vista de contenedor (que contiene su botón), desactive el diseño automático de la vista de contenedor y habilite el diseño automático solo para los contenidos dentro de la vista de contenedor. Use el diseño del marco para la vista del contenedor.

En resumen, las celdas TableView / CollectionView no pueden tomar subvistas accionables (UIButton, UISegmentedControl) que están habilitadas para el diseño automático. Si lo necesita, deshabilite los diseños automáticos y proporcione marcos (o) colóquelos dentro de una vista de contenedor (la vista de contenedor debe tener el diseño automático desactivado) y agregue las vistas accionables (con diseño automático) como subvistas a la vista de contenedor .

Cuando usa Interface Builder (Storyboard), asegúrese de marcar la checkbox User Interaction Enabled del User Interaction Enabled desde la Content View

Ninguna de estas respuestas funcionó para mí.

La única forma en que pude solucionar este problema fue establecer la selección de celda de la tabla de simple a ninguna. Después de eso, pude recibir llamadas de respaldo.

De acuerdo, he encontrado una solución a este problema, pero parece ser un gran hack; sin embargo, es todo lo que pude inventar (nada más me funcionó).

Sobre la base de mi button , agregué un UITextField que delega a la celda de la vista de tabla en cuestión. Esa instancia de tableViewCell implementa -(BOOL) textFieldShouldBeginEditing:(UITextField *)textField y devuelve NO .

Con un cableado suficiente, la verdadera solución para mí es ir al guión gráfico, seleccionar la vista de contenido en la celda y verificar el “userInteractionEnabled” … de lo contrario, incluso si has habilitado la interacción del usuario en el botón o la celda, contentview siempre bloqueará la acción .

Tenía una vista transparente en esa celda que implementaba algunas características internas y manejaba en toques en sí mismo.

Revisé todo, pero cometí un error tonto. En el guión gráfico, la supervista de mi botón estaba debajo de otra vista. así que tocar no estaba pasando a mi botón.