2015-02-25 3 views
0

У меня есть пользовательская таблица для просмотра таблицы. И этот код для красть-удаления:iOS. Table View Cell swipe hard working

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { 
    return reportingCellIndexPath != indexPath; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 
    NSInteger result = [self.messagesModel numberOfDifferentDayDatesInMessages]; 
    return result; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSDate *sectionDate = [self.messagesModel dayDateAtNumber:section]; 
    NSInteger rowsCount = [self.messagesModel numberOfMessagesWithDayDate:sectionDate]; 
    return rowsCount; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSInteger realMessageIndex = [self.messagesModel fullMessageIndexForMessageWithDayDateNumber:indexPath.section index:indexPath.row]; 


    SDMessage *message = [self.messagesModel messageAtIndex:realMessageIndex]; 
// SDMessage *message = [self.messagesModel messageAtIndex:indexPath.row withDayDateAtNumber:indexPath.section]; 
    static NSString *messageCellId = @"messageCellId"; 
    SDMessageCell *_messageCell = [tableView dequeueReusableCellWithIdentifier:messageCellId]; 
    if (_messageCell == nil) { 
     _messageCell = [[SDMessageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:messageCellId]; 
    } 
    [_messageCell rebuildWithMessage:message]; 
    _messageCell.delegate = self; 
    if ([reportingCellIndexPath isEqual:indexPath] && 
     ![_messageCell reportViewIsShowing]) { 
     [_messageCell showReportViewWithMessagesModel:self.messagesModel messageIndex:realMessageIndex]; 
    } else if ([_messageCell reportViewIsShowing]) { 
     [_messageCell hideReportView]; 
    } 
    return _messageCell; 


} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    CGFloat result = [self tableView:tableView cellForRowAtIndexPath:indexPath].frame.size.height; 
    return result; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    return 40; 
} 

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    NSDate *sectionDate = [self.messagesModel dayDateAtNumber:section]; 
    if (sectionDate != nil) { 
     return [self sectionTitleForSectionDate:sectionDate]; 
    } else { 
     return @""; 
    } 
} 


- (NSString *)sectionTitleForSectionDate:(NSDate *)date { 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

    NSCalendar *calendar = [NSCalendar currentCalendar]; 

    NSDate *now = [NSDate date]; 

    NSDateComponents *dateComponents = [calendar components: 
             NSYearCalendarUnit | 
             NSMonthCalendarUnit | 
             NSDayCalendarUnit | 
             NSWeekdayCalendarUnit | 
             NSWeekCalendarUnit 
                fromDate:date]; 
    NSDateComponents *nowComponents = [calendar components:NSYearCalendarUnit | 
             NSMonthCalendarUnit | 
             NSDayCalendarUnit | 
             NSWeekdayCalendarUnit | 
             NSWeekCalendarUnit 
                fromDate:now]; 

    if (dateComponents.year == nowComponents.year && 
     dateComponents.month == nowComponents.month && 
     dateComponents.week == nowComponents.week) { 
     if (nowComponents.weekday - dateComponents.weekday < 2) { 
      [dateFormatter setDoesRelativeDateFormatting:YES]; 
     } else { 
      [dateFormatter setDateFormat:@"EEEE"]; 
     } 
    } 

    return [dateFormatter stringFromDate:date]; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [self cancelSearchField]; 
    NSInteger realMessageIndex = [self.messagesModel fullMessageIndexForMessageWithDayDateNumber:indexPath.section index:indexPath.row]; 
    if (indexPath.row < self.messagesModel.size && realMessageIndex > -1) { 

     [self.messagesModel selectMessageAtIndex:realMessageIndex]; 

     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
      self.refreshBeforeShowing = NO; 
      [self.navigationController pushViewController:self.detailViewController animated:YES]; 
     } 
    } 
} 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     NSInteger realMessageIndex = [self.messagesModel fullMessageIndexForMessageWithDayDateNumber:indexPath.section index:indexPath.row]; 
     [SDModalLoadingIndicator showLoading]; 
     [self.messagesModel deleteMessageAtIndex:realMessageIndex success:^() { 
      [SDModalLoadingIndicator hideLoading]; 

      NSString *msg = NSLocalizedString(@"Message has been deleted", nil); 
      [[[[iToast makeText:msg] 
       setDuration:iToastDurationNormal] 
       setGravity:iToastGravityBottom] show]; 
      [self.tableView reloadData]; 
     } failureCallback:^(NSString *message, NSMutableArray *validationErrors, NSError *error) { 
      [SDModalLoadingIndicator hideLoading]; 
      [SDFailureHandler handleConnectFailure:message withError:error]; 
     }]; 
    } 
} 

Но почти всегда не показывать кнопку Удалить на взмахе (Иногда кнопка будет показывать).. Кто-нибудь знает, почему?

Я пробовал отлаживать эту вещь, проверяя все виды отладчиком, и у них есть только системные распознаватели жестов (панорамирование, кратковременное нажатие, длительное нажатие, край).

Также я могу сказать, что этот метод «Tableview: canEditRowAtIndexPath:» называется каждый раз, когда я проведите клетку, но ничего не произошло (в большинстве случаев)

+1

Вы внедрили все необходимые методы для редактирования 'UITableView'? Можете ли вы показать нам всю вашу реализацию 'UITableViewDataSource'? – mbm29414

+0

Это может предоставить ваш ответ: http://stackoverflow.com/questions/3309484/uitableviewcell-show-delete-button-on-swipe –

+0

Я пробовал все это думать и не работает –

ответ

0

Вы должны убедиться, что у вас также есть настройки функции с commitEditingStyle делегата. ,

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle != UITableViewCellEditingStyleDelete) 
     return; 

    // perform the delete! 
} 

Кроме того, помните, что салфетки, чтобы удалить это только присутствует, когда tableViewне редактируется (в режиме редактирования, кнопка минус виден на строках, а).

0

Я просто забыл, что мое приложение использовало боковое меню. Таким образом, боковое меню добавляло жест жестки на мой взгляд для закрытия и открытия события перетаскивания.

И я понимаю, если у вас есть все необходимые методы, реализованные и удаленные с помощью салфетки не работают. ВСЕГДА пытайтесь найти какой-то жест или элемент, который ловит вас на событие touch.