ошибка удаления tableview с сенсорным интерфейсом после TableView: был использован commitEditingStyle:forRowAtIndexPath

#iphone #ios #uitableview

#iPhone #iOS #uitableview

Вопрос:

Я переопределяю TableView:commitEditingStyle:forRowAtIndexPath, чтобы стать методом, который сбрасывает текстовые метки в моих uitableviewcells, однако это приводит к ошибкам, когда пользователь в следующий раз прикасается к uitableview .. его нужно коснуться один раз, прежде чем он что-либо сделает (поэтому для получения какого-либо ответа требуется два касания.)

Я надеюсь, что кто-то может помочь, кто также был в подобной ситуации;. Мой код приведен ниже.. Я отладил его до метода TableView:commitEditingStyle:forRowAtIndexPath, как если бы я закомментировал tableview:titleForDeleteConfirmationButtonForRowAtIndexPath: метод, все равно происходит то же самое.. Поэтому я думаю, что я делаю что-то не так, переопределяя другой метод.

 - (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return @"Clear";
}

// Override to support editing the table view.
- (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:UITableViewRowAnimationNone];

        //reset uitableviewcell textlabel with default input "empty"
        vehicleSearchObjectString = @"empty";
        [self.tableView reloadData]; //reloads the tabels so you can see the value.

    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
  

Обновить
Здесь я устанавливаю текстовую метку uitableviewcell

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"VehicleSearchCell" owner:self options:nil];
        cell = vehicleSearchCell;
        self.vehicleSearchCell = nil;
    }
    // Configure the cell...
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    if(indexPath.section == 0)
    {
        if(indexPath.row == 0)
        {
            UILabel *label1;
            label1 = (UILabel *)[cell viewWithTag:1];
            label1.text = @"Manufacture";

            UILabel *label2;
            label2 = (UILabel *)[cell viewWithTag:2];
            label2.text = vehicleSearchObjectString;
        }
//...
  

Комментарии:

1. В чем ошибка / проблема? Сбой? Что?

2. как только я нажимаю кнопку, и uitextlabel ячейки устанавливается на «пустой», если я попытаюсь нажать на эту текстовую ячейку (которая должна привести меня к вложенному просмотру), она не отвечает при первом касании.. он отвечает на второй … похоже, что весь мой uitableview перестает отвечать.

3. vehicleSearchObjectString: что это? Где вы устанавливаете его для затронутой (подлежащей удалению) ячейки tableViewCell?

4. Это строка NS, объявленная в моем основном представлении, которая устанавливается протоколом subview, который я настроил.

5. ОК. Итак, где вы устанавливаете «пустой» для UITableViewCell?

Ответ №1:

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

Еще одно направление, которому я хотел бы следовать, — избегать метода reloadData, который запускает довольно много вещей и иногда не контролируется разработчиком. У вас есть indexPath, поэтому вы можете настроить таргетинг на одну ячейку для обновления, используя :

 - (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
  

в представлении таблицы.

Последнее, что я бы исследовал, это комментарий Apple об обновлении таблиц: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/ManageInsertDeleteRow/ManageInsertDeleteRow.html#//apple_ref/doc/uid/TP40007451-CH10-SW1 В нем говорится, что метод commit … должен вызывать метод :

 deleteRowsAtIndexPaths:withRowAnimation: 
  

или аналогичный для вставки, но это не то, что произойдет, если нет.

Комментарии:

1. хорошо, спасибо за предложения.. Я собираюсь перейти к ним сейчас 🙂 спасибо. очевидно, что если я получу какой-либо из них, я дам вам награду.

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

Ответ №2:

Итак, я решил проблему !… Я в основном удалил просмотры.h.m.xib запустился снова, в значительной степени скопировал мой код прямо в файл, и он работает отлично… Я понятия не имею, почему это произошло, может быть, что-то, что я сделал, когда я впервые его настроил.. Я не уверен…