Cómo implementar Deslizar de izquierda a derecha en la celda UITableView similar a iOS Mail
Estoy tratando de replicar la misma técnica que Apple utiliza en su aplicación de correo para marcar el correo como no leído o "Marcar como no leído" cuando se desliza de izquierda a derecha dentro de un buzón.
He encontrado similar soluciones pero solo para un gesto de deslizar de derecha a izquierda. Esperaba que esta misma solución estuviera disponible como parte del SDK de Apple en 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 lo hace?
4 answers
He encontrado soluciones similares, pero solo para un gesto de deslizar desde de derecha a izquierda.
SWTableViewCell tiene todas las opciones que desee.
Mientras que dequeing una célula acaba de configurar el conjunto izquierdo/derecho de botones 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
Ex 1:
Ex 2:
En caso de que esté buscando botones apilados verticalmente, consulte este.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-16 11:20:10
Normalmente lo implemento a nivel de tabla.
- (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];
}
A continuación, tiene el control de la dirección y puede 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 va a Jade Mind
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-23 18:31:32
La respuesta aceptada en el enlace que has proporcionado es para ambas direcciones de swipes.
Observe que gestureRecognizer.direction
devuelve YES
tanto para UISwipeGestureRecognizerDirectionLeft
y UISwipeGestureRecognizerDirectionRight
.
Solo necesitas modificar un par de cosas:
Cambia el selector al que se llama get al deslizar, para que llame a tu método, en lugar del del ejemplo del post,
Y cambie la dirección del golpe para que sea de izquierda a derecha solamente, y no para ambas direcciones como es actualmente, ya que, según tengo entendido, usted es tratando de establecer un golpe en una dirección.
Así que 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 gesture recogniser direction
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 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, necesitará crear la animación de deslizado de celdas usted mismo, ya que, creo, la animación de celdas predeterminada de Xcode es solo cuando desliza hacia la izquierda.
El crédito va a MadhavanRP
y Julian
desde el enlace que has proporcionado. Acabo de modificar sus respuestas a la suite mejor a sus necesidades.
Aunque no he intentado e implementado esto yo mismo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-16 09:27:31
Utilice 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]];
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-20 12:01:44