UIButton no funciona cuando está en UIScrollView

Mi estructura de puntos de vista:

UITableView UITableViewCell UIScrollView CustomView UIButton 

El problema es que UIButton no funciona cuando lo toco. Lo creo con código:

 btn = [[UIButton alloc] init]; [btn setImage:image forState:UIControlStateNormal]; [btn addTarget:self action:@selector(tileTouchUpInside) forControlEvents:UIControlEventTouchUpInside]; btn.layer.zPosition = 1; [self addSubview:btn]; 

También agregué esto:

 scroll.delaysContentTouches = NO; scroll.canCancelContentTouches = NO; 

Pero mi botón no funciona de todos modos. No puedo cancelar ContentTouches o configurar retraso para UITableView porque si lo configuro, UITableView deja de desplazarse verticalmente.

¡Gracias por cualquier ayuda!

Crea una subclase de UIScrollview con

 - (BOOL)touchesShouldCancelInContentView:(UIView *)view { return NO; } 

Si no recibe ese mensaje, configure:

 scrollView.delaysContentTouches = NO; 

El problema se debe a la forma en que touchesShouldCancelInContentView comporta de manera predeterminada, devuelve NO solo si la subvista es un UIControl, pero su botón está oculto dentro de CustomView, que no lo está.

Encontré el mismo escenario. UIScrollView en clase separada y botón de adición a través de una vista personalizada. ‘NSNotificationCenter’ me ayudó a resolver el problema. Código de muestra:

 -(void)tileTouchUpInside:(id)sender { NSDictionary *dict=[NSDictionary dictionaryWithObject:@"index" forKey:@"index"]; [[NSNotificationCenter defaultCenter]postNotificationName:@"Action" object:nil userInfo:dict]; } 

En la clase que contiene la vista de desplazamiento:

 - (void)viewDidLoad { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doAction:) name:@"Action" object:nil]; } -(void)doAction:(NSNotification *) notification { NSString* value =[notification.userInfo valueForKey:@"index"]; // ....... } 

Habilite la interacción del usuario para la vista de desplazamiento, la vista personalizada y el botón.

Supongo que necesitas establecer el marco del botón. Por defecto si usa btn = [[UIButton alloc] init]; método para inicializar el botón será UIButtonTypeCustom . Establezca también un color de fondo para fines de depuración para anotar dónde se coloca realmente el botón. Ahora para su caso necesita establecer el marco para ese botón como btn.frame = CGRectMake(0,0,100,100);

Para el UIScrollView interno, implemente este método delegado.

 - (BOOL)touchesShouldCancelInContentView:(UIView *)view { return ![view isKindOfClass:[UIButton class]]; } 

Esto puede funcionar

El marco de su CustomView podría interferir con su UIButton. ¿Se superponen? Agregue su botón a CustomView solo para probar por [CustomView addSubview:UIButton]; (usando tus valores por supuesto). Si funciona, entonces tu problema probablemente sea una superposición.

Ninguna de las respuestas funcionó para mí, porque mi problema era que el botón no era visible en el momento del diseño o algo así …

FIJAR:

1) mueva el botón fuera de scrollView completo (para ser una subvista de la view principal de VC).

jerarquía de la vista principal

2) seleccione el button y el elemento de su contentV usted quiere contentV su botón (en mi caso: después del último elemento en conventoV)

botón y selección del último elemento

3) agregue las restricciones necesarias (en mi caso: para alinear abajo)

enter image description here

4) Agregue el rest de las restricciones para el button .

5) Disfruta.

El enlace de Capt.Hook me ayudó. Usé UIGestureRecognizer en lugar de UIButtons.

Permita que UIScrollView y sus subvistas respondan a un toque Úselo, si tiene el problema similar.

Agregue todas las subvistas de CustomView a ScrollView. Y esconde el CustomView. Asegúrese de que CustomView (ContainerView of scrollView) también sea una subvista de scrollView.

Tuve el mismo problema y la misma jerarquía de las vistas. Con el último SDK, simplemente úselo:

Configuración de retrasosContenido toca NO para UIButton en la misma UITableViewCell.

 self.tableView.delaysContentTouches = NO