ios objective-c uitableview gestures

Cómo implementar Swipe de izquierda a derecha en la celda UITableView similar al correo de iOS



objective-c gestures (4)

He encontrado soluciones similares, pero solo por un gesto de deslizar de derecha a izquierda.

SWTableViewCell tiene todas las opciones que puede desear.

Mientras ejecuta el proceso de pegar una celda, configure los botones de izquierda / derecha según sea necesario.

cell.leftUtilityButtons = [self leftButtons]; cell.rightUtilityButtons = [self rightButtons]; cell.delegate = self;

Y al configurar el controlador de vista como su delegado, puede escuchar los clics del botón. Los detalles completos sobre cómo implementar están en ese enlace.

Ej 1:

Ex 2:

En caso de que estés buscando botones apilados verticalmente mira this .

Estoy tratando de replicar la misma técnica que Apple usa en su aplicación de correo para marcar el correo como no leído o "Marcar como no leído" cuando pasas de izquierda a derecha dentro de un buzón.

He encontrado solutions similar solutions pero solo por un gesto de deslizar de derecha a izquierda. Esperaba que esta misma solución estuviera disponible como parte del SDK de Apple para la dirección opuesta.

¿Cómo puedo lograr el mismo efecto de gesto de izquierda a derecha que la aplicación de correo de iOS?


La respuesta aceptada en el enlace que ha proporcionado es para ambas instrucciones de deslizamiento.
Tenga en cuenta que gestureRecognizer.direction devuelve YES para UISwipeGestureRecognizerDirectionLeft y UISwipeGestureRecognizerDirectionRight .

Solo necesitarás modificar un par de cosas:
Cambie el selector al que se llama "swip", para que llame a su método, en lugar de al del ejemplo de la publicación.
Y cambie la dirección del deslizamiento para que sea de izquierda a derecha solamente, y no para ambas direcciones como lo es actualmente, ya que, según tengo entendido, está intentando establecer un deslizamiento de una dirección.

Entonces tu código debería verse así:

// In cellForRowAtIndexPath:, where you create your custom cell cell.tableView=tableView; cell.indexPath=indexPath; UISwipeGestureRecognizer *swipeGestureRecognizer=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(YOUR_METHOD_GOES_HERE)]; [cell addGestureRecognizer:swipeGestureRecognizer];

.

-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if([[gestureRecognizer view] isKindOfClass:[UITableViewCell class]] && ((UISwipeGestureRecognizer*)gestureRecognizer.direction==UISwipeGestureRecognizerDirectionRight) return YES; }

Tenga en cuenta que también podría usar la respuesta debajo de la respuesta aceptada y simplemente modificar la propiedad de la direction reconocedor de gestos para que sea UISwipeGestureRecognizerDirectionRight , en lugar de la dirección actual en el ejemplo, que es UISwipeGestureRecognizerDirectionLeft .

Si elige implementar esto, su viewController debe implementar el delegado del reconocedor de gestos, y su código debería tener este aspecto:

// Call this method in viewDidLoad - (void)setUpLeftSwipe { UISwipeGestureRecognizer *recognizer; recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRightt:)]; [recognizer setDirection:UISwipeGestureRecognizerDirectionRight]; [self.tableView addGestureRecognizer:recognizer]; recognizer.delegate = self; } - (void)swipeRight:(UISwipeGestureRecognizer *)gestureRecognizer { CGPoint location = [gestureRecognizer locationInView:self.tableView]; NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location]; ... do something with cell now that i have the indexpath, maybe save the world? ... }

Nota: si no me equivoco, deberá crear la animación de barrido de celda usted mismo, ya que, creo, la animación de celda predeterminada de Xcode es solo cuando se desliza hacia la izquierda.

El crédito va a MadhavanRP y Julian desde el enlace que has proporcionado. Acabo de modificar sus respuestas para adaptarse mejor a sus necesidades.
Aunque no lo he intentado y lo he implementado yo mismo.


Normalmente lo implemento a nivel de mesa.

- (void)viewDidLoad { [super viewDidLoad]; UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(leftSwipe:)]; [recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)]; [self.tableView addGestureRecognizer:recognizer]; recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(rightSwipe:)]; recognizer.delegate = self; [recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)]; [self.tableView addGestureRecognizer:recognizer]; }

Entonces tienes el control de la dirección y puedes personalizar a voluntad.

- (void)leftSwipe:(UISwipeGestureRecognizer *)gestureRecognizer { //do you left swipe stuff here. } - (void)rightSwipe:(UISwipeGestureRecognizer *)gestureRecognizer { //do you right swipe stuff here. Something usually using theindexPath that you get that way CGPoint location = [gestureRecognizer locationInView:self.tableView]; NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location]; }

El crédito es para Jade Mind


Use su TableViewCell personalizado con scrollview como se indica a continuación:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 80; } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 120; } -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { return header_view; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [array_field1 count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Schedule_cell"; Custom_Schedule_Cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = (Custom_Schedule_Cell *)[Custom_Schedule_Cell cellFromNibNamed:@"Custom_Schedule_Cell"]; } x = 0; UILabel *lbl_title =[[UILabel alloc] initWithFrame:CGRectMake(x,0,cell.scroll_view.frame.size.width,cell.scroll_view.frame.size.height)]; lbl_title.text=@"Title Array"; [lbl_title setTextAlignment:NSTextAlignmentCenter]; [lbl_title setFont:[UIFont fontWithName:@"Raleway" size:18.0f]]; x += lbl_title.frame.size.width+10; UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(x,0,110,cell.scroll_view.frame.size.height)]; [button setTitle:@"Button1" forState:UIControlStateNormal]; [button setBackgroundColor:[UIColor grayColor]]; [button addTarget:self action:@selector(button1:) forControlEvents:UIControlEventTouchDown]; button.tag = indexPath.row; [button.titleLabel setTextAlignment:NSTextAlignmentCenter]; [button.titleLabel setFont:[UIFont fontWithName:@"Raleway" size:14.0f]]; x += button.frame.size.width+5; UIButton *button2 = [[UIButton alloc] initWithFrame:CGRectMake(x,0,110,cell.scroll_view.frame.size.height)]; [button2 setTitle:@"Button2" forState:UIControlStateNormal]; [button2 setBackgroundColor:[UIColor grayColor]]; [button2 addTarget:self action:@selector(button2:) forControlEvents:UIControlEventTouchDown]; button2.tag = indexPath.row; [button2.titleLabel setTextAlignment:NSTextAlignmentCenter]; [button2.titleLabel setFont:[UIFont fontWithName:@"Raleway" size:14.0f]]; x += button2.frame.size.width+5; UIButton *button3 = [[UIButton alloc] initWithFrame:CGRectMake(x,0,110,cell.scroll_view.frame.size.height)]; [button3 setTitle:@"Button3" forState:UIControlStateNormal]; [button3 setBackgroundColor:[UIColor grayColor]]; [button3 addTarget:self action:@selector(button3:) forControlEvents:UIControlEventTouchDown]; button3.tag = indexPath.row; [button3.titleLabel setTextAlignment:NSTextAlignmentCenter]; [button3.titleLabel setFont:[UIFont fontWithName:@"Raleway" size:14.0f]]; [cell.scroll_view addSubview:lbl_title]; [cell.scroll_view addSubview:button]; [cell.scroll_view addSubview:button2]; [cell.scroll_view addSubview:button3]; x += button3.frame.size.width+5; cell.scroll_view.contentSize = CGSizeMake(x,cell.scroll_view.frame.size.height); cell.scroll_view.showsHorizontalScrollIndicator = NO; cell.scroll_view.showsVerticalScrollIndicator = NO; [cell.scroll_view setContentOffset:CGPointMake(0,0) animated:NO]; [cell.scroll_view setPagingEnabled:true]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // Custom_Schedule_Cell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; // [selectedCell.scroll_view setContentOffset:CGPointMake(x2,0) animated:NO]; } -(void)button1:(UIButton *)button { NSLog(@“button1 Click "); [button setBackgroundColor:[UIColor redColor]]; } -(void)button2:(UIButton *)button { NSLog(@“button2 Click"); [button setBackgroundColor:[UIColor greenColor]]; } -(void)button3:(UIButton *)button { NSLog(@“button Click"); [button setBackgroundColor:[UIColor redColor]]; }