Я хочу, чтобы иметь возможность прокручивать влево или вправо в любом месте ячейки таблицы, чтобы стереть ячейку с анимацией, не показывая кнопку удаления. Как я могу это сделать?Проведите пальцем влево или вправо в любом месте UITableViewCell, чтобы удалить ячейку без кнопки удаления?
ответ
Я не пробовал и не реализовал это, но я сделаю это. Во-первых, создать пользовательские UITableViewCell, и пусть она имеет 2 свойства, которые можно использовать
- отсылка к Tableview она используется в.
- An indexPath найти ячейку в Tableview. (Примечание, это необходимо обновлять каждый раз, когда вы удаляете ячейку для всех ячеек, где это изменяется)
В вашем cellForRowAtIndexPath:
, где вы создаете пользовательскую ячейку, задайте эти свойства. Кроме того, добавить UISwipeGestureRecognizer в клетку
cell.tableView=tableView;
cell.indexPath=indexPath;
UISwipeGestureRecognizer *swipeGestureRecognizer=[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(deleteCell:)];
[cell addGestureRecognizer:swipeGestureRecognizer];
[swipeGestureRecognizer release];
Убедитесь, что жест получает только горизонтальное пойло.
-(BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if([[gestureRecognizer view] isKindOfClass:[UITableViewCell class]]&&
((UISwipeGestureRecognizer*)gestureRecognizer.direction==UISwipeGestureRecognizerDirectionLeft
||(UISwipeGestureRecognizer*)gestureRecognizer.direction==UISwipeGestureRecognizerDirectionRight)) return YES;
}
В вашем deleteCell:
-(void) deleteCell:(UIGestureRecognizer*)gestureRec
{
UIGestureRecognizer *swipeGestureRecognizer=(UISwipeGestureRecognizer*)gestureRec;
CustomCell *cell=[swipeGestureRecognizer view];
UITableView *tableView=cell.tableView;
NSIndexPath *indexPath=cell.indexPath;
//you can now use these two to perform delete operation
}
Не забывайте, что вам нужно указать направление распознавателя жестов, когда он сначала инициализирует его, чтобы добавить его в ячейку. Что-то вроде этого: swipeGestureRecognizer.direction = UISwipeGestureRecognizerDirectionRight; – ColossalChris
Apple, черт возьми, за не предоставление '(void) cancelPreviousPerformRequestsWithTarget: (id) aTarget селектор: (SEL) aSelector'. –
Для этого вы должны добавить этот код в свой проект.
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return YES if you want the specified item to be editable.
return YES;
}
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
//add code here for when you hit delete
}
}
Else мор Информация и может пойти по этой ссылке enter link description here
Vivek2012 и iWill - Спасибо за ответы, но я не хочу показывать кнопку DELETE, ответы на них уже есть в stackoverflow. Я хочу, чтобы ячейка была стерта с минуты, когда она получает салфетки влево или вправо.пожалуйста, прочитайте мое описание спасибо – carbonr
реализации
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
эти два метода, если UITableViewCellEditingStyle является UITableViewCellEditingStyleDelete, то сделать что-н, чтобы стереть ячейку с
- (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
вот и все.
Решение, которое разместил @MadhavanRP работает, но он является более сложным, чем это должно быть. Вы можете использовать более простой подход и создать один распознаватель жестов, который обрабатывает все прокрутки, которые встречаются в таблице, а затем получить местоположение салфетки, чтобы определить, какая ячейка пользователь провела.
Для установки жест распознаватель:
- (void)setUpLeftSwipe {
UISwipeGestureRecognizer *recognizer;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self
action:@selector(swipeLeft:)];
[recognizer setDirection:UISwipeGestureRecognizerDirectionLeft];
[self.tableView addGestureRecognizer:recognizer];
recognizer.delegate = self;
}
Вызов этого метода в viewDidLoad
Для обработки салфетки:
- (void)swipeLeft:(UISwipeGestureRecognizer *)gestureRecognizer {
CGPoint location = [gestureRecognizer locationInView:self.tableView];
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
... do something with cell now that i have the indexpath, maybe save the world? ...
}
Примечание: ваш VC должны реализовать жест распознавателя делегата ,
если можете, укажите свой код? –