2013-09-26 28 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 - Nope。私は物事を試みてきましたが、まだ解決策はありません。そしてあなたは正しい!私はどこかでそれを見ていたが、どこを覚えていないのか分かっていた。 – hgwhittle

答えて

4

私は最終的に解決策を見つけたと思います!カスタムセルを使用すると、そのセルをUIScrollViewDelegateとして設定し、scrollViewDidScroll:メソッドを実装できます。このメソッドでは、UIScrollViewのcontentOffsetを強制的に特定の値にとどめることができます(これは、 'Delete'ボタンが完全に表示されている場合はcontentOffsetのように見えます)82.0fを使用しています。このように:

@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としてのViewControllerを設定し、設定することにより、カスタムセルを使用せずに行うことができます.H

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

私は何を行うことができますが、あなたのセルをサブクラス化し、didTransitionToState:にあなたが削除の確認状態を検出することが可能である、おそらくそのためのオプションがあると思いますがいけません。

ここで、スクロールを防ぐためにできることは完全にはわかりませんが、これが正しい方向に向いてくれることを願っています。

おそらく、この状態でセルのジェスチャ認識機能を無効にすることはできますか?

関連する問題