No se puede desplazar hacia arriba / abajo y desplazarse hacia la izquierda / derecha al mismo time en UITableView dentro de un UIScrollView

2ª actualización Gracias al comentario y reference de @Segev a otro tema, pude mejorar mi demostración para que básicamente hiciera lo que quería. Sin embargo, todavía no es tan fácil como la implementación de Instagram, y me preguntaba si alguien sabe cómo podría mejorarlo para ser más suave. Además, noté que a veces (en mi demostración), cuando estoy deslizando hacia la izquierda / derecha muy rápido y quiero cambiar a deslizar hacia arriba / hacia abajo, seguirá deslizando hacia la izquierda / derecha hasta que detengo el deslizado y lo deje detente primero

Actualización: pude get la vista de tabla para deslizar hacia la izquierda / derecha después de detener el desplazamiento ascendente / descendente henetworkingando de UIScrollView e implementando los methods shouldRecognizeSimultaneouslyWithGestureRecognizer y shouldBeRequinetworkingToFailByGestureRecognizer de UIGestureRecognizerDelegate. Mi idea era volver true en shouldRecognizeSimultaneouslyWithGestureRecognizer si el usuario está desplazándose hacia arriba / abajo en la tablaView, y luego en shouldBeRequinetworkingToFailByGestureRecognizer para fallar el gesto de arriba / abajo de la vista de tabla.

Pero todavía no puedo determinar cómo dejar que el usuario se desplace hacia arriba / abajo o hacia la izquierda / derecha después de detener el desplazamiento inicial hacia arriba / hacia abajo (y el dedo del usuario aún está en el dispositivo).

Creé un proyecto de ejemplo aquí https://github.com/paulsfds/TableViewsInScrollView . Puede probar esto deslizando hacia abajo en la vista de la tabla una vez, luego levante el dedo y mientras sigue desplazándose, vuelva a colocar el dedo para detener el desplazamiento. Mientras su dedo todavía está en la vista de la tabla, intente deslizar hacia la izquierda / derecha y debería funcionar. Pero con esta implementación, si intenta deslizar hacia abajo la vista de tabla varias veces, a veces se atascará porque pensará que está intentando deslizar hacia la izquierda / derecha. ¿Algunas ideas?

Original: Tengo un par de UITableViews que están dentro de un UIScrollView que tiene habilitación de pagination, y está configurado para permitirme hacer páginas de izquierda a derecha, de modo que solo una UITableView sea visible a la vez. Aquí hay un diagtwig (tomado de desplazamiento Conflictive en UITableView dentro de UIScrollView )

+--visible area--+ ---+ +---------`UIScrollView`---------+---------------+| --+| | +-------------+ +-------------+|+-------------+|| -+|| | | 0 | | 1 ||| 2 ||| ||| | |`UITableView`| |`UITableView`|||`UITableView`||| equal height | | | | ||| ||| ||| | +-------------+ +-------------+|+-------------+|| -+|| +--------------------------------+---------------+| --+| +----------------+ ---+ 

Lo que me gustaría lograr es que si el usuario se desplaza hacia abajo en la vista de la tabla y luego levanta el dedo (y la animation de desplazamiento hacia abajo todavía está sucediendo), el usuario puede optar por deslizar hacia la izquierda y hacia la derecha para ir a la siguiente vista de tabla. En este momento si el usuario se desplaza hacia abajo en la vista de la tabla, y luego levanta el dedo y mientras la animation de desplazamiento sigue sucediendo, y luego vuelve a poner el dedo para deslizar hacia la izquierda y hacia la derecha, no permitirá que el usuario se desplace hacia la izquierda y derecha, y estoy atascado viendo la vista de tabla ya visible a less que espere a que el desplazamiento de la vista de tabla se detenga por completo y luego pase de izquierda a derecha.

TL; DR Básicamente no puedo desplazarme hacia arriba / abajo de la tabla y deslizar hacia la izquierda / derecha en la vista de desplazamiento al mismo time, pero me gustaría poder hacer esto. Un ejemplo de esto sería en la aplicación Instagram de iOS en la pestaña Actividad. Puede desplazarse hacia abajo y deslizar hacia la derecha mientras la vista de la tabla sigue desplazándose.

introduzca la descripción de la imagen aquí

Aquí hay un proyecto de ejemplo que funciona: https://github.com/rishi420/SwipeWhileScroll

Puede leer más sobre este tema aquí:

CrossDirectional UIScrollViews: ¿puedo modificar el comportamiento de desplazamiento?

Desafortunadamente, Apple no admite la incorporación de UITableViews dentro de UIScrollViews:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebView_Class/index.html

IMPORTANTE

No debe incrustar objects UIWebView o UITableView en objects UIScrollView. Si lo hace, puede producirse un comportamiento inesperado porque los events táctiles para los dos objects pueden mezclarse y manejarse erróneamente.

Sin embargo, dicho eso, aún puede ser posible lograr lo que estás buscando. ¿Has intentado configurar delayContentTouches en verdadero para que scrollview envíe su gesto desplazado fallido (es decir, el desplazamiento horizontal) a sus hijos (es decir, la vista de tabla)?

 self.yourScrollView.panGestureRecognizer.delaysTouchesBegan = true 

Si bien esta pregunta tiene una respuesta aceptada, quería proporcionar mi propia solución para otros que pueden tener problemas similares:

Use un UICollectionView para search las vistas UITable en lugar de UIScrollView

Pasos básicos con UIStoryboards:

  • Agregue UICollectionView a UIViewController en el Storyboard.
  • Actualice los attributes de UICollectionView de modo que esté utilizando la pagination en lugar de desplazarse y establezca los attributes de layout para que la celda ocupe el tamaño completo de UICollecionView.
  • Agregue un UITableView a UICollectionViewCell.
  • Agregue el IBOulet para UICollectionView a su ViewController.h y conecte el tomastream.
  • Cree una subclass UICollectionViewCell y agregue el IBOutlet a UITableView a la .h de la celda
  • En su Storyboard, establezca el tipo de class de UICollectionViewCell en la celda personalizada que acaba de crear.
  • Conecte los IBOutlets para su UICollectionView y UITableView.
  • Por último, deberá establecer sus delegates y fonts de datos para los dos e implementar los methods. Desde que intenté esto como un ejemplo rápido, hice de mi ViewController el delegado y el origen de datos para UICollectionView y UITableView. Sin embargo, su implementación puede diferir de aquí.

Siempre y cuando configure correctamente el origen de datos de su UICollectionView, debería estar bien.

Acabo de hacer algo con una funcionalidad similar.

Lo que funcionó para mí fue hacer una extensión para el UIPanGestureRecognizer (estoy trabajando con swift 2; si quieres, podría volver a escribir la solución para objC), así puedo saber cuándo el usuario sacó el dedo del dispositivo. Entonces, puedes deslizar hacia la izquierda / derecha, supongo.

Aquí está el código, lo explico a continuación:

extensión UIPanGestureRecognizer {

 public override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent) { state = .Ended NSNotificationCenter.defaultCenter().postNotification(NSNotification(name: "panningEnded", object: nil)) } 

}

Esta es la única forma en que podría alcanzar los toques seleccionados para ese gesto específico. Todo lo que tiene que hacer desde aquí es agregar un observador para la notificación que envió y luego hacer que el usuario pueda deslizar el dedo. Avísame si esto fue útil.

Saludos cordiales