2013-03-25 3 views
7

私はUICollectionViewを使って私の最初のアプリケーションを構築していますが、私はオブジェクトの削除の点ではあまりできないことに気づいています。 、振るビューの星と削除ボタンを表示することができる -UICollectionViewセルを削除する方法(commitEditingStyleに相当)?

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
if (editingStyle == UITableViewCellEditingStyleDelete) { 
     // Delete the row from the data source 
     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    } 

} 

私はGMGridViewを使用する場合、それはiPhoneのホーム画面上で長押しに似た振る舞いを持っている:UITableViewアプリのために、そこにメソッドを削除するスワイプですビューを削除する責任があります。私は確かにこの動作を再現しようとすることができますが、ユーザーが「取得する」かどうかはわかりません。

私は、ユーザーがUICollectionViewからオブジェクトを削除させるための私のオプションが何であるかに興味がある - 私は私自身の削除ジェスチャー/コントロールを実装する必要があり、または私が欠けている何か(またはオープンソース)があります?

+3

私がUICollectionViewで作業するほど、成熟したUITableViewがどれほど成熟しているかがわかります。 – jrturton

答えて

7

私はCollectionViewが含まれて私のビューコントローラにこのコードを挿入し、それをこのようにしました。選択したセルを検出するためにタップジェスチャーを使用して既にこのようなことを行っている可能性があります。将来的にはこれを読んで、誰のために

- (IBAction)didLongPressCellToDelete:(UILongPressGestureRecognizer*)gesture { 
CGPoint tapLocation = [gesture locationInView:self.myCollectionView]; 
NSIndexPath *indexPath = [self.myCollectionView indexPathForItemAtPoint:tapLocation]; 
if (indexPath && gesture.state == UIGestureRecognizerStateBegan) { 
    NSLog(@"image with index %d to be deleted", indexPath.item); 
    self.itemToBeDeleted = indexPath.item; 
    UIAlertView *deleteAlert = [[UIAlertView alloc] 
          initWithTitle:@"Delete?" 
          message:@"Are you sure you want to delete this image?" 
          delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Yes", nil]; 
    [deleteAlert show]; 

} 
} 


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
NSLog(@"selected button index = %d", buttonIndex); 
if (buttonIndex == 1) { 
    // Do what you need to do to delete the cell 
    [self.myCollectionView reloadData]; 
} 
} 
+0

これは 'self.itemToBeDeleted'とは何ですか? – iPeter

+0

self.itemToBeDeletedは、ユーザーが削除したいアイテムのインデックスに設定されます。 – RawMean

+0

それを得ました! :) @RawMean – iPeter

6

デフォルトUICollectionViewCellは空白のビュー(タイトルなし、ノー削除ボタン、ノーImageViewの)

サブクラスUICollectionViewCellを持っており、それに削除ボタンを追加します。

//Cell.h 
@class MyCell; 
@protocol MyCellDelegate 
-(void)deleteButtonClick:(MyCell *)cell; 
@end 
@interface MyCell : UICollectionViewCell 
@property (weak , nonatomic) id<MyCellDelegate> delegate; 
@property (weak,nonatomic) IBOutlet *delButton; 
@end 

//Cell.m 
-(void)awakeFromNib{ 
    [self.delButton setHidden:YES] 
    //add Swipe right to here 
} 
-(void)handleSwipeRight:(UISwipeGestureRecognizer *)swipe { 
    [self.delButton setHidden:NO]; 
} 
-(IBAction)clickDelBut{ 
[self.delegate deleteButtonClick:self]; 
} 

//ViewController.m 
//In cellForItemsAtIndexPath cell.delegate = self. 

-(void)deleteButtonClick:(MyCell *)cell{ 
    //get indexPath, delete data and reload collectionView here 
} 
:あなたはそれを表示したいとき setHidden =いいえストーリーボードにスクロール垂直UICollectionViewCellを削除する

サンプル使用スワイプ権をcollectionViewデータを削除し、再ロードする

使用カスタムデリゲート(。例下にスワイプ)

+0

私の懸念は、私のコレクションビューが垂直にスクロールするので、スワイプダウンは機能しません。これは、削除するスワイプがない理由です。ユーザーに何らかの方向にスワイプしたり、長押しを教えるのは面倒です。 –

0

UICollectionViewで削除したり編集したりするために私が見つけて実装しているのは、このブログ記事です。

基本的にコピー/ペーストのメニューを表示し、削除のために自分のアクションを追加します。 iSangの答えと似ていますが、UICollectionViewでうまく動かないジェスチャ認識機能を追加することはありません。

これは、iOSの他の部分でテキストやリンクをコピーして貼り付けるときに、すでに編集メニューを表示するために使用していた長押しのジェスチャを使用します。

http://paulsolt.com/2012/11/uicollectionview-custom-actions-and-uimenucontroller/

0

、ここで私が使用してきた便利なライブラリがあります: https://github.com/Raizlabs/RZUtils/tree/master/RZUtils/Components/RZCollectionTableView

それはUICollectionViewを使用してのUITableViewを模倣するので、あなたが持つコレクションビューの柔軟性を得ることができますUITableViewに付属しているすばらしい編集機能のすべて。

異なる種類の削除動作または異なるレイアウトを実装しようとしている場合は、私が知っている限り、ゼロから実装する必要があります。 UIGestureRecognizersを使ってカスタム作業を行うのが初めての方は、このチュートリアルをお勧めします。 http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more

関連する問題