2013-03-25 25 views
7

Tôi đang xây dựng ứng dụng đầu tiên của mình bằng cách sử dụng UICollectionView và nhận thấy rằng không có nhiều việc tôi có thể thực hiện khi xóa đối tượng. Đối với UITableView ứng dụng, có các swipe để xóa phương pháp:UICollectionXem cách xóa ô (tương đương với 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]; 
    } 

} 

Khi tôi sử dụng GMGridView, nó có hành vi tương tự như báo chí dài trên màn hình chủ iPhone - các ngôi sao nhằm lắc và một nút xóa có thể được hiển thị, mà chịu trách nhiệm xóa chế độ xem. Tôi chắc chắn có thể cố gắng để nhân rộng hành vi này, nhưng tôi không chắc chắn nếu người dùng sẽ "nhận được nó".

Tôi quan tâm đến một số điều tôi đang thiếu (hoặc nguồn mở) là gì? ?

+3

Tôi càng làm việc với UICollectionView, tôi càng nhận ra UITableView trưởng thành ... – jrturton

Trả lời

7

tôi chèn mã này trong điều khiển điểm của tôi bao gồm các CollectionView và đã làm nó theo cách này. Bạn có thể đã làm một cái gì đó như thế này với cử chỉ chạm để phát hiện ô đã chọn.

- (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' này là gì? – iPeter

+0

self.itemToBeDeleted được đặt thành chỉ mục của mục mà người dùng muốn xóa. – RawMean

+0

OK! :) @RawMean – iPeter

6

Mặc định UICollectionViewCell chỉ có một cái nhìn trống (không có tiêu đề, không có nút xóa, không IMAGExem)

lớp con UICollectionViewCell và thêm nút xóa trên đó. setHidden = NO khi bạn muốn hiển thị nó (. Ex: vuốt xuống)

Sử dụng tùy chỉnh đại biểu để loại bỏ dữ liệu và tải lại collectionView

mẫu sử dụng swipe quyền xóa UICollectionViewCell cuộn theo chiều dọc trong Storyboard:

//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 
} 
+0

Mối quan ngại của tôi là chế độ xem bộ sưu tập của tôi cuộn theo chiều dọc, vì vậy thao tác vuốt xuống sẽ không hoạt động. Có lẽ đây là lý do tại sao không có swipe để xóa - bởi vì giáo dục người dùng để swipe theo một số hướng hoặc làm báo chí dài là quá nhiều rắc rối. –

0

Những gì tôi đã tìm thấy và đang triển khai để xóa và chỉnh sửa mọi thứ trong UICollectionView là từ bài đăng trên blog này.

Về cơ bản hiển thị menu cho Sao chép/Dán ect và thêm hành động của riêng tôi để xóa. Nó tương tự như câu trả lời của iSang, mà không thêm các trình nhận dạng cử chỉ không hoạt động tốt trong UICollectionViews.

Sử dụng cử chỉ báo chí dài mà mọi người đã sử dụng để hiển thị menu chỉnh sửa khi muốn sao chép và dán văn bản và liên kết trong các phần khác của iOS.

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

0

Đối với bất cứ ai đọc sách này trong tương lai, đây là một thư viện hữu ích Tôi đã sử dụng: https://github.com/Raizlabs/RZUtils/tree/master/RZUtils/Components/RZCollectionTableView

Nó bắt chước một UITableView sử dụng một UICollectionView, vì vậy bạn có thể nhận được sự linh hoạt của xem bộ sưu tập với tất cả các chức năng chỉnh sửa tốt đẹp đi kèm với một UITableView.

Nếu bạn đang cố gắng triển khai loại hành vi xóa khác hoặc bố cục khác nhau, theo tôi biết bạn phải triển khai từ đầu. Nếu bạn mới làm những việc tùy chỉnh với UIGestureRecognizers, tôi khuyên bạn nên hướng dẫn này: http://www.raywenderlich.com/6567/uigesturerecognizer-tutorial-in-ios-5-pinches-pans-and-more

Hy vọng điều đó sẽ hữu ích!