UITableViewCell 如何检测用户向左或向右滑动?

Posted

技术标签:

【中文标题】UITableViewCell 如何检测用户向左或向右滑动?【英文标题】:UITableViewCell How can I detect that the user has swiped left or Right? 【发布时间】:2016-05-19 07:17:08 【问题描述】:

我正在使用SWTableViewCell,我想知道用户向左或向右滑动时触发的操作。

【问题讨论】:

查看***.com/questions/6167756/… 这种方法只识别UIGestureRecognizerStateEnded状态 @ahmedlabib 它有多个UIGestureRecognizerState 选项,如开始、取消、更改、结束等 你试过了吗 - (void)swipeableTableViewCell:(SWTableViewCell *)cell scrollingToState:(SWCellState)state; “SWTableviewCell”的方法 谢谢@wolverine 这对我来说很完美 【参考方案1】:

您必须在 cellForRowAtIndexPath 中添加手势识别器

 UISwipeGestureRecognizer* swRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(cellSwipedRight:)];
[swRight setDirection:UISwipeGestureRecognizerDirectionRight];
[cell addGestureRecognizer:swRight];

UISwipeGestureRecognizer* swLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(cellSwipedLeft:)];
[swLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[cell addGestureRecognizer:swLeft];

然后是它的选择器方法

-(void)cellSwipedRight:(UIGestureRecognizer *)gestureRecognizer

    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) 
        // your code
    


-(void)cellSwipedLeft:(UIGestureRecognizer *)gestureRecognizer

    if (gestureRecognizer.state == UIGestureRecognizerStateEnded) 
        // your code
    

【讨论】:

正如我对 @kb920 所说的那样 - 这种方法只能识别 UIGestureRecognizerStateEnded 状态。 不...当我在您的问题UIGestureRecognizerStateBeganUIGestureRecognizerStateCancelledUIGestureRecognizerStateChangedUIGestureRecognizerStateEnded 等中发表评论时,它可以识别多种状态 它工作了谢谢你,还找到了另一个解决方案SWTableViewCell图书馆- (void)swipeableTableViewCell:(SWTableViewCell *)cell scrollingToState:(SWCellState)state;【参考方案2】:

试试这个对你有用的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    

    UISwipeGestureRecognizer* swipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(cellSwiped:)];
    [swipe setDirection:UISwipeGestureRecognizerDirectionRight];
    [cell addGestureRecognizer:swipe];

    cell.textLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row];


return cell;
    


    - (void)cellSwiped:(UIGestureRecognizer *)gestureRecognizer 
    
        if (gestureRecognizer.state == UIGestureRecognizerStateEnded) 
        
            UITableViewCell *cell = (UITableViewCell *)gestureRecognizer.view;
            NSIndexPath* indexPath = [self.tableView indexPathForCell:cell];
            //..
        
    

【讨论】:

以上是关于UITableViewCell 如何检测用户向左或向右滑动?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中检测向左或向右滑动?

在 UITableViewCell 中的任意位置向左或向右滑动以删除没有删除按钮的单元格?

如何在 SwiftUI 中实现触发 switch case 的左或右 DragGesture()?

向左或向右滑动时,我的卡片视图不会总是消失?

UITableViewCell 内的 UICollectionView 滚动行为

Bootstrap nav 子菜单根据页面限制向左或向右浮动