iOS 7中新的“滑动删除”外观增加了“反弹”效果,UITableViewCell在滑动后继续偏移。有没有办法禁用此反弹,以便一旦删除按钮完全可见,单元格就会停止?
继续抵消的单元格:
即使继续拖动,我希望单元格停在此处:
我在cellForRowAtIndexPath:
方法中尝试了这一点,但似乎没有任何改变。
for(UIView *subview in cell.subviews){
if([subview isKindOfClass:[UIScrollView class]]){
UIScrollView *theScrollView = (UIScrollView *)subview;
theScrollView.bounces = NO;
}
}
答案 0 :(得分:4)
我想我终于找到了解决方案!使用自定义单元格,您可以将该单元格设置为UIScrollViewDelegate
并实施scrollViewDidScroll:
方法。在该方法中,您可以强制UIScrollView的contentOffset保持在特定值(我使用82.0f
,因为当“删除”按钮完全可见时,它似乎是contentOffset)。像这样:
<强>·H 强>
@interface MyCustomCell : UITableViewCell <UIScrollViewDelegate>
.m
-(void)awakeFromNib{
[super awakeFromNib];
for(UIView *subview in self.subviews){
if([subview isKindOfClass:[UIScrollView class]]){
UIScrollView *theScrollView = (UIScrollView *)subview;
theScrollView.delegate = self;
}
}
}
#pragma mark - UIScrollViewDelegate
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
static CGFloat kTargetOffset = 82.0f;
if(scrollView.contentOffset.x >= kTargetOffset){
scrollView.contentOffset = CGPointMake(kTargetOffset, 0.0f);
}
}
这也可以在不使用自定义单元格的情况下完成,只需将ViewController设置为UIScrollViewDelegate
并在tableView:cellForRowAtIndexPath
中设置UIScrollView的委托就像这样:
<强>·H 强>
MyViewController : UIViewController <UITableViewDataSource, UITableViewDelegate, UIScrollViewDelegate>
<强>的.m 强>
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
for(UIView *subview in cell.subviews){
if([subview isKindOfClass:[UIScrollView class]]){
UIScrollView *theScrollView = (UIScrollView *)subview;
theScrollView.delegate = self;
}
}
return cell;
}
#pragma mark - UIScrollViewDelegate
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
static CGFloat kTargetOffset = 82.0f;
if(scrollView.contentOffset.x >= kTargetOffset){
scrollView.contentOffset = CGPointMake(kTargetOffset, 0.0f);
}
}
答案 1 :(得分:1)
我不认为有这样的选择,但也许您可以做的是将您的单元格子类化,并且在didTransitionToState:
中您可以检测到删除确认状态。
现在我不能完全确定你可以做些什么来阻止滚动,但我希望这能让你朝着正确的方向前进。
也许您可以在此状态下禁用单元格的手势识别器?
答案 2 :(得分:1)