iphone - example - UIButton en un encabezado UITableView ignora la mayoría de los toques
uitableview swift 4 (9)
Tengo un botón que estoy agregando como una subvista de la tabla vista de la tabla HeaderView. 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.
¿Estoy haciendo algo mal? ¿Alguien más ha encontrado esto?
editar - para aclarar, estoy hablando del encabezado de la tabla principal, no de un encabezado de sección, en una tabla de estilo agrupado; piense básicamente modelado después de la pantalla "Contacto".
Debe considerar que este no es el objetivo del headerView y que una implementación como esa 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.
Estoy completamente en desacuerdo con Wisequark: no hay absolutamente nada de malo en poner un botón en la tabla HeaderView, e incluir uno no implicaría el riesgo de que tu aplicación sea rechazada desde la tienda de aplicaciones. TableHeaderView está diseñado para ser una vista arbitraria que contiene los elementos que elijas.
En cuanto a su problema, podría ser que tenga una vista que oscurece su botón, o, simplemente, podría ser un error que se debe informar a Apple.
Yo tuve el mismo problema. En mi caso, tuve una vista de contenedor instanciada en IB (que se aplicó como encabezado de vista de tabla en código), con un UIImageView ocupando todo el marco 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 el conjunto de IB de la siguiente manera ...
Vista de contenedor: anclas exteriores, cambio de tamaño interior, todo apagado
Vista de imagen secundaria: todos los puntales activados (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
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 respondí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'' extiende UIView, y ''MYCustomWidgetView'' es un archivo XIB).
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 de 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.
tableHeaderView tiene 0 de altura mientras está procesando dibujar en UITableView
use esta subclase UIView para establecer la altura constante fuerte e ignore el procesamiento de UITableView
#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
Aunque parezca extraño, la vista de encabezado de la tabla aparentemente se redimensionó incorrectamente. Utilizo 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 jerarquía de vistas:
y noté que mi vista de encabezado personalizado tenía una altura incorrecta, por lo que solo se podía tocar menos de la mitad (vea la vista resaltada):
La actualización manual de su altura solucionó el problema:
- (void)viewDidLayoutSubviews {
CGRect frame = self.tableView.tableHeaderView.frame;
frame.size.height = 116.0;
self.tableView.tableHeaderView.frame = frame;
}
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.
Tengo el mismo problema. UIButtons
acciones de UIButtons
no funcionan en UITableView''s
vista de encabezado UITableView''s
. Primero probé setAutoresizingMask
para .None
que no funciona, luego de leer las respuestas de @Davyd y @Alexey me di cuenta de que no configuré la altura de la vista de los encabezados, luego lo configuré como: -
self.tablevwMain.tableHeaderView?.frame = CGRect(x: 0, y: 0, width: width_view, height: your_height)
Y todo UIButton''s
dentro de UITableView''s
vista de encabezado UITableView''s
funciona correctamente.
No olvides configurar la altura del pie de página en:
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{