2013-09-26 76 views
5

在iOS 7中新的「輕掃刪除」外觀添加了「反彈」效果,其中UITableViewCell在輕掃後繼續偏移。有什麼辦法可以禁用這種反彈,這樣一旦刪除按鈕完全可見,單元格就會硬停止。是繼續如何刪除UITableViewCell輕掃以刪除反彈

細胞,以抵消:

我想要的細胞停在這裏,即使拖着繼續:

enter image description here

我在cellForRowAtIndexPath:方法試過,但似乎沒有什麼更改。

for(UIView *subview in cell.subviews){ 
    if([subview isKindOfClass:[UIScrollView class]]){ 
     UIScrollView *theScrollView = (UIScrollView *)subview; 
     theScrollView.bounces = NO; 
    } 
} 
+0

你得到這個工作?如果你看看集成的天氣應用程序,它會做你想做的事情,我一直在尋找如何做到這一點,現在仍然沒有任何東西。 –

+0

@AlexSaidani - 沒有。我一直在嘗試,但仍然沒有解決方案。你說得對!我知道我曾經在某個地方看過它,但卻不記得在哪裏。 – hgwhittle

回答

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); 
    } 
} 

這也可以不使用自定義單元格通過簡單地設置一個視圖控制器作爲UIScrollViewDelegate和設置完成UIScrollView的代表tableView:cellForRowAtIndexPath像這樣:

.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

我不認爲有針對的選擇,但也許你可以做的是子類的細胞和didTransitionToState:您可以檢測刪除確認狀態。

現在在這一點上我不完全確定你可以做什麼來防止滾動,但我希望這會讓你在正確的方向。

也許你可以在這個狀態禁用細胞的手勢識別器?