ios objective-c ipad uisplitviewcontroller

ios - Adición de reconocedor de gesto de barrido a DetailViewContoller



objective-c ipad (5)

Esto funciona. Empuja el controlador de vista desde el control de navegación.

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandler:)]; [self.view addGestureRecognizer:gestureRecognizer]; } -(IBAction)swipeHandler:(UISwipeGestureRecognizer *)sender { NSLog(@"SWIPE"); UIViewController *tb = [[DetailViewController alloc] init]; tb = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; [self.navigationController pushViewController: tb animated:YES]; }

Luego, asegúrese de ir al guión gráfico (o también puede hacerlo manualmente): haga clic en el controlador de vista detallada y asigne la identidad al controlador de vista: DetailViewController

Tengo un proyecto de Xcode simple recién hecho de la plantilla "Master-Detail Application", para iPad. Cuando el dispositivo está en orientación Vertical, la vista maestra está oculta y cuando se desliza hacia la derecha en la vista detallada, se mostrará la vista maestra. Ahora, quiero agregar el reconocedor de gestos de barrido derecho a la vista de detalles, de esta forma:

- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self configureView]; UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandler)]; [self.view addGestureRecognizer:gestureRecognizer]; } -(void)swipeHandler{ NSLog(@"SWIPE"); }

Pero este código hace que cuando deslice en la vista detallada, aparezca el registro "SWIPE" en la consola, pero la vista maestra no aparezca.

¿Cómo agregar el reconocedor de gestos de deslizamiento derecho a la vista de detalles, para que no impida que se muestre la vista maestra y mi controlador para el reconocedor funcionará?

Gracias por adelantado.

EDITAR. Quiero que mi controlador del reconocedor de deslizamiento a la derecha funcione simultáneamente con este integrado, que muestra la vista maestra, pero que el siguiente código no es una solución para esta situación específica:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES; }


Prueba esto

// Swipe derecho

UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandlerRight:)]; [gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionRight)]; [self.view addGestureRecognizer:gestureRecognizer];

// Deslizar a la izquierda

UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandlerLeft:)]; [gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)]; [self.view addGestureRecognizer:gestureRecognizer];

método de llamada

-(void)swipeHandlerRight:(id)sender { //Your ViewController } -(void)swipeHandlerLeft:(id)sender { //Your ViewController }


debe establecer la dirección para el deslizamiento para agregar el deslizamiento correcto

UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeHandler:)]; [gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionRight)]; [self.view addGestureRecognizer:gestureRecognizer];

y su controlador de golpe puede parecer

-(void)swipeHandler:(UISwipeGestureRecognizer *)recognizer { NSLog(@"Swipe received."); }


swift 4.0

Paso 1: Agregue gestos de deslizamiento en el método viewDidLoad ().

override func viewDidLoad() { super.viewDidLoad() let swipeLeft = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture)) swipeLeft.direction = .left self.view.addGestureRecognizer(swipeLeft) let swipeRight = UISwipeGestureRecognizer(target: self, action: #selector(handleGesture)) swipeRight.direction = .right self.view.addGestureRecognizer(swipeRight) }

Paso 2: Verifique la detección de gestos en el método handleGesture ()

@objc func handleGesture(gesture: UISwipeGestureRecognizer) -> Void { if gesture.direction == UISwipeGestureRecognizerDirection.right { print("Swipe Right") } else if gesture.direction == UISwipeGestureRecognizerDirection.left { print("Swipe Left") } }


- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRecognizer:)]; recognizer.direction = UISwipeGestureRecognizerDirectionRight; recognizer.delegate = self; [self.view addGestureRecognizer:recognizer]; } - (void)swipeRecognizer:(UISwipeGestureRecognizer *)sender { if (sender.direction == UISwipeGestureRecognizerDirectionRight){ [UIView animateWithDuration:0.3 animations:^{ CGPoint Position = CGPointMake(self.view.frame.origin.x + 100.0, self.view.frame.origin.y); self.view.frame = CGRectMake(Position.x , Position.y , self.view.frame.size.width, self.view.frame.size.height); [self.navigationController popViewControllerAnimated:YES]; }]; } }