如何确定是不是正在拖动 UITableViewCell?

Posted

技术标签:

【中文标题】如何确定是不是正在拖动 UITableViewCell?【英文标题】:How to determine if a UITableViewCell is being dragged?如何确定是否正在拖动 UITableViewCell? 【发布时间】:2012-02-25 05:02:30 【问题描述】:

我想知道是否正在拖动单元格(当 UITableView 处于编辑模式时,通过右侧的夹点)。我想在它处于该状态时更改背景。

【问题讨论】:

【参考方案1】:

不幸的是,没有回调,但由于默认行为是调整 UITableViewCell 的“alpha”值,您可以在 UITableViewCell 子类的“- (void)layoutSubview”中检查。

- (void)layoutSubviews

    [super layoutSubviews];
    if (self.alpha < 0.99) 
        // we are most likely being dragged
     else 
        // restore for not being dragged
    

请注意,这有点小技巧。我注意到当表格视图的 separatorStyle 设置为 'UITableViewCellSeparatorStyleNone' 时,这不起作用。

【讨论】:

【参考方案2】:

我不知道这在框架中是否可行。但如果不是,您可以尝试在 UITableViewCell 子类中覆盖 touchMoved 方法吗?

然后,您也许还可以在 UItableViewCell 的自定义子类中检索 tableView 的状态(是否正在编辑)。

【讨论】:

【参考方案3】:

有可能,是的!

在 ViewController.h 中

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UIScrollViewDelegate>

    IBOutlet UITableView * myTable;
    IBOutlet UIScrollView * myScroll;

在 ViewController.m 中

#pragma mark - View lifecycle

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    myScroll = myTable;
    myScroll.delegate = self;




#pragma Mark UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView

    NSLog(@"%f",scrollView.contentOffset.y);

就是这样。

【讨论】:

无论何时滚动表格视图,无论是否拖动单元格,都会调用它。【参考方案4】:

有可能是的!但是您必须自己在视图控制器中跟踪状态。定义成员 布尔表拖动 = 否; 在方法中 scrollViewWillBeginDragging 你设置 tableDrag = YES;并且在方法中 scrollViewDidEndDragging 你设置 tableDraw = NO;

现在可以在 scrollViewDidScroll 委托方法中设置背景。

如果您有多个滚动条,则标记滚动视图,以便您知道哪个滚动条正在拖动。

希望对你有帮助!

【讨论】:

以上是关于如何确定是不是正在拖动 UITableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery UI Sortable 将拖动对象的类添加到占位符以确定大小

如何检查拖动视图的位置是不是位于另一个视图之上

plotly rangeslider 如何确定是不是选择了范围

如何使拖放列表进行复制而不是移动列表项

如何确定拖动事件相对于对象的开始位置

如何确定Outlook拖放期间拖动的附件