如何在UITableView Cell中实现从左向右滑动,类似于iOS Mail

gh0*_*0st 24 objective-c uitableview gestures ios

我正在尝试复制Apple在其邮件应用中使用的相同技术,用于将邮件标记为未读或在邮箱内从左向右滑动时"标记为未读".

iOS 8.1 Mail应用程序中的邮件截图

我找到了类似的 解决方案,但仅用于从右向左滑动的手势.我希望这个相同的解决方案可以作为Apple SDK的一部分用于相反的方向.

我怎样才能实现与iOS'邮件应用程序相同的从左到右的手势效果?

Goo*_*33d 28

我找到了类似的解决方案,但仅用于 从右向左滑动的手势.

SWTableViewCell具有您可能需要的所有选项.

在对单元格进行二次取消时,只需根据需要设置左/右按钮组.

cell.leftUtilityButtons = [self leftButtons];
cell.rightUtilityButtons = [self rightButtons];
cell.delegate = self;
Run Code Online (Sandbox Code Playgroud)

通过将视图控制器设置为其委托,您可以听取按钮单击.有关如何实施的详细信息,请参见该链接

例1:

在此输入图像描述

例2: 在此输入图像描述

如果您正在寻找垂直堆叠的按钮,请查看此信息.


Gra*_*eph 20

我通常在表级实现它.

- (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];
}
Run Code Online (Sandbox Code Playgroud)

然后您可以控制方向并可以随意自定义

- (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];
}
Run Code Online (Sandbox Code Playgroud)

归功于Jade Mind

  • 这个正确的答案应该是没有在项目中实现第三方库的答案.由于苹果对接受应用程序非常严格,因此可以选择限制可能性.这个解释了开发人员如何获取leftToRight滑动的gestureRecognizer. (3认同)

Lok*_* SN 9

从 iOS 11 开始,有本机规定(通过 委托方法UITableViewDelegate)来UITableView在两边的单元格上启用“滑动操作” :

func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? //For actions at the left

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? //For actions at the right
Run Code Online (Sandbox Code Playgroud)

这些方法返回一个UISwipeActionsConfiguration包含数组UIContextualAction

对于 a UIContextualAction,您可以指定其标题、样式、背景颜色、动作颜色,甚至是 anUIImage并处理其回调(显然 :-) )

这是一个示例实现:

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

    let filterAction = UIContextualAction(style: .normal, title: "FILTER") { (action, view, bool) in
        print("Swiped to filter")
    }
    filterAction.backgroundColor = UIColor.blue

    return UISwipeActionsConfiguration(actions: [filterAction])
}
Run Code Online (Sandbox Code Playgroud)

我知道这是一个老问题,但我发布这个只是为了帮助有人随机经过......


小智 5

你可以在 Swift 5 中这样做:

func tableView(_ tableView: UITableView,
                leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
{
    let closeAction = UIContextualAction(style: .normal, title:  "Close", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
        print("OK, marked as Closed")
        success(true)
    })
    closeAction.image = UIImage(named: "tick")
    closeAction.backgroundColor = .purple
 
    return UISwipeActionsConfiguration(actions: [closeAction])
}
 
func tableView(_ tableView: UITableView,
                trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
{
    let modifyAction = UIContextualAction(style: .normal, title:  "Update", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
        print("Update action ...")
        success(true)
    })
    modifyAction.image = UIImage(named: "hammer")
    modifyAction.backgroundColor = .blue
 
    return UISwipeActionsConfiguration(actions: [modifyAction])
}
Run Code Online (Sandbox Code Playgroud)