2013-04-03 1 views
0

Я пытался отладить это в течение нескольких часов, и я не видел никого онлайн, у которого такая же проблема.Редактирование UITableView - минус только нажатие на нажатие и удержание

У меня была функция удаления, работающая как ожидалось ранее, после добавления некоторого кода таинственно кнопки минус перестали функционировать. Сначала я думал, что они вообще не работают, но потом выяснили, что если бы я держал мой кран примерно на 5 секунд, он бы повернул и отобразил кнопку удаления, как следует.

Есть несколько жестов на столе, но никаких жестов LongPress. Ячейки являются пользовательскими ячейками, но это не вызывало проблемы, когда я впервые работал. Любая помощь приветствуется. Вот соответствующий код:

/// 
/// Pushes detail view for item swiped 
/// 
- (IBAction)cellSwipeLeft:(UISwipeGestureRecognizer *)sender { 
    if (sender.state == UIGestureRecognizerStateEnded && ![self isEditing]) { 
     NSIndexPath *gestureIndexPath = [self modelIndexPathForIndexPath:[self indexPathForUIGestureRecognizer:sender]]; 

     // swiped left 
    } 
} 

/// 
/// Checks off reminder in list 
/// 
- (IBAction)cellSwipeRight:(UISwipeGestureRecognizer *)sender { 
    if (sender.state == UIGestureRecognizerStateEnded && ![self isEditing]) { 
     NSIndexPath *gestureIndexPath = [self modelIndexPathForIndexPath:[self indexPathForUIGestureRecognizer:sender]]; 

     //swiped right 
    } 
} 

- (IBAction)cellTap:(UITapGestureRecognizer *)sender { 

    if (sender.state == UIGestureRecognizerStateEnded && ![self.tableView isEditing]) { 
    NSIndexPath *gestureIndexPath = 
    [self modelIndexPathForIndexPath:[self indexPathForUIGestureRecognizer:sender]]; 

     // push detail view 
    } 
} 

/// 
/// Makes tableview rows editable 
/// 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath  { 
    return YES; 
} 

/// 
/// Returns editing style of tableview 
/// 
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView  editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return UITableViewCellEditingStyleDelete; 
} 

/// 
/// Toggles tableview editing 
/// 
- (void)setEditing:(BOOL)editing animated:(BOOL)animated { 

    [super setEditing:editing animated:animated]; 
    [self.tableView setEditing:editing animated:animated]; 
} 

/// 
/// Deletes selected rows 
/// 
- (void)tableView:(UITableView *)tableView 
commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) 
    { 
     [self deleteReminderAtIndexPath:indexPath]; 

     // Animate deletion 
     NSArray *indexPaths = [NSArray arrayWithObject:indexPath]; 
     [[self tableView] deleteRowsAtIndexPaths:indexPaths 
          withRowAnimation:UITableViewRowAnimationAutomatic]; 
    } 
} 
+0

Почему вы используете распознаватель крана вместо '- tableView: didSelectRowAtIndexPath:'? Можете ли вы показать, как вы настраиваете распознаватели жестов? – danielbeard

+0

Спасибо! Это указывало мне в правильном направлении, когда выяснял проблему с жестким желобом. Хотя я не могу получить didSelectRowAtIndexPath: чтобы работать очень хорошо. Простое нажатие на ячейку не вызывает этот метод. Я буду изучать следующий – user1869469

+0

Вы должны установить свойство делегата 'UITableView' для вашего контроллера представления. – danielbeard

ответ

0

Я понял, что жест нажатия, как это было предложено в комментариях, вызывал проблему. Я понял это, установив жест нажатия на 2 касания, чтобы посмотреть, что произошло. Он работал так, как ожидалось, поэтому они, должно быть, мешали друг другу.