2008-11-17 11 views
14

Tengo un botón que estoy agregando como una subvista de tableHeaderView de una tabla. El botón parece estar bien, y presionar y mantener funciona de manera intermitente, aunque la mayoría no responde. Intenté agregarlo como una subvista de la tabla; el efecto es aproximadamente el mismo. Pensé que el problema podría ser con la intercepción táctil de la vista de desplazamiento, pero deshabilitar el desplazamiento sobre la mesa tampoco tiene ningún efecto.UIButton en un encabezado UITableView ignora la mayoría de los toques

¿Estoy haciendo algo mal? ¿Alguien más ha encontrado esto?

editar - para aclarar, me refiero al encabezado principal de la tabla, no a un encabezado de sección, en una tabla de estilo agrupado; piense básicamente modelado después de la pantalla "Contacto".

+0

Estaba experimentando este problema exacto, pero la respuesta aceptada no funcionó para mí. La [respuesta a esta pregunta] (http://stackoverflow.com/questions/19256996/uibutton-not-showing-highlight-on-tap-in-ios7/19299451#19299451) me solucionó el problema a la perfección. –

Respuesta

22

Tuve el mismo problema. En mi caso, tuve una vista de contenedor instanciada en IB (que se aplicó como el encabezado de la vista de tabla en el código), con un UIImageView ocupando todo el fotograma de ese contenedor. El botón que funciona mal residía en la vista de la imagen.

Resulta que necesitaba tener puntales de tamaño en IB establecidos de la siguiente manera ...

de contenedores Ver: anclajes exteriores sobre todo, el interior de cambio de tamaño - todo apagado

Sub Imagen Vista: todos los puntales en (interior y exterior)

Tenía varias vistas de tabla diferentes, todas usando vistas de encabezado. Algunos responderían a eventos táctiles correctamente, algunos serían escamosos. Esto resolvió mi problema

+2

+1. Esto funcionó para mí. No estoy usando IB para esto, así que tuve que establecer programáticamente los struts con '-setAutoresizingMask:', y encontré que solo era necesario en el contenedor. El control de imagen interno no necesitaba nada. ¡Gracias! Nunca hubiera tropezado con esto por accidente. –

+0

Después de horas de golpear mi cabeza, esto funcionó para mí. Gracias. – thedeveloper3124

+1

De hecho. En mi caso, tenía algunos UITextFields en el encabezado que mostrarían el teclado. Estaba cambiando el tamaño de mi vista de tabla para acomodar el teclado. Todo parecía correcto visualmente y la mesa se desplazó exactamente como se deseaba. Sin embargo, ninguno de los controles en el encabezado de la tabla fue receptivo. Cambié el tamaño de la vista de tabla. Mi vista de contenedor tenía la escala interior activada. Una vez que lo apagué, ¡todo funcionó! Gracias. –

-7

Debería considerar que esta no es la intención del headerView y que una implementación como esta podría provocar el rechazo de la AppStore como resultado de una violación HIG. Dado que las dimensiones de un encabezado son pequeñas, probablemente sea mejor considerar una reestructuración de su vista. Habiendo dicho eso, no hay una manera fácil de hacerlo, salvo la detección manual de eventos táctiles y la determinación de la geometría, y luego la ejecución de un selector basado en la geometría, en resumen, la creación de su propia clase de botón.

+0

No puedo encontrar nada en el HIG que prohíba el uso de botones en la tabla (a diferencia de la sección) vistas de encabezado/pie de página; la aplicación Contactos agrega botones al pie de página sin problemas, y la muestra "HeaderFooter" de Apple hace algo similar (aunque presenta el mismo problema). Radar, tal vez? –

+0

Es muy probable que sugeriría presentar un error. – wisequark

7

estoy completamente en desacuerdo con Wisequark - no hay absolutamente nada de malo con poner un botón en el tableHeaderView, e incluyendo uno podría no arriesgar su aplicación sea rechazada desde la tienda de aplicaciones. TableHeaderView está diseñado para ser una vista arbitraria que contiene los elementos que elijas.

Por lo que respecta a su problema, podría ser que tenga una vista que oscurece su botón o, simplemente, puede ser un error que se debe informar a Apple.

10

Tuve un problema similar: un campo de texto y un botón dentro de una vista configurados como la vista de encabezado de la tabla que no respondería a los eventos táctiles. setAutoResizing programmatically funcionó para mí.

Mi controlador extiende UITableViewController y viewDidLoad se ve así:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    MYCustomWidget *headerView = [[[NSBundle mainBundle] 
       loadNibNamed:@"MYCustomWidgetView" owner:self options:nil] 
       objectAtIndex:0]; 

    [headerView setAutoresizingMask:UIViewAutoresizingNone]; 

    self.tableView.tableHeaderView = headerView; 
} 

('MYCustomWidget' se extiende UIView, y 'MYCustomWidgetView' es un archivo XI ter).

+3

configurando AutoresizeMask lo hizo por mí. – Matjan

2

Mi situación era similar a la de Danny Hall (la vista de encabezado de la tabla era un UIImageView, y había un UIButton que era una subvista del UIImageView). En mi caso, el problema parece haber sido causado por el botón que es una subvista de la vista de la imagen. Lo que funcionó para mí fue crear una vista "que contiene" UIView, de modo que tanto la vista de la imagen como el botón fueran subvistas de la vista "que contiene". extraño.

+0

Sí, UIImageView tiene 'userInteractionEnabled' establecido en' NO' de forma predeterminada, por lo que un botón como subvista de una vista de imagen no responderá a los toques. Estoy bastante seguro de que este era un problema diferente. Gracias por la sugerencia, sin embargo. :) –

1

tableHeaderView tiene 0 altura mientras se está procesando las tablas en UITableView

uso esta UIView subclase para establecer el fuerte altura constante e ignorar UITableView procesamiento

#import <UIKit/UIKit.h>             
@interface CustomHeaderCell : UIView 

@end 

//----- 

@import "CustomHeaderCell.h" 

@implementation CustomHeaderCell 


-(void)setFrame:(CGRect)frame { 
    frame.size.height = 43; // !!! constant height 
    [super setFrame:frame]; 
} 

@end 
2

Por extraño que parezca, pero la vista de encabezado de la tabla aparentemente se redimensionó incorrectamente. Uso el diseño automático, por lo que la máscara de aumento automático no era una opción para mí. Después de inspeccionar mi vista de jerarquía: enter image description here

y se dio cuenta de que mi vista encabezado personalizado tuvo altura incorrecta, por lo que sólo menos de la mitad de ella era hacer tapping (véase la vista resaltado):

enter image description here

Manual de actualización de su altura fija el problema:

- (void)viewDidLayoutSubviews { 
    CGRect frame = self.tableView.tableHeaderView.frame; 
    frame.size.height = 116.0; 
    self.tableView.tableHeaderView.frame = frame; 
} 

enter image description here

Además, la altura del encabezado de la vista de tabla puede quedar invalidada después de cambiar la orientación. Este problema también se puede solucionar con la solución proporcionada.

-1

no se olvide de ajustar la altura de pie de página en:

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ 
0

que tienen el mismo problema UIButtons acciones que no trabajan en UITableView's vista de encabezado. En primer lugar he intentado setAutoresizingMask a .None que no funciona, entonces después de leer las respuestas de @Davyd y @Alexey me doy cuenta que no se estableció la altura de las cabeceras de vista, entonces me puse como: -

self.tablevwMain.tableHeaderView?.frame = CGRect(x: 0, y: 0, width: width_view, height: your_height) 

Y todo dentro de UIButton'sUITableView's vista de encabezado funciona correctamente.

Cuestiones relacionadas