Определите, является ли операция редактирования удалением или добавлением в UITableViewController - PullRequest
0 голосов
/ 10 сентября 2011

Итак, я хочу иметь возможность определить, как отличить операции вставки от операций удаления, чтобы я мог ответить соответствующим образом. В настоящее время у меня есть этот код для создания кнопок «Готово», «Редактировать» и «Добавить»

- (void)initializeNavigationBarButtons
{
    UIBarButtonItem *newEditButton = 
    [[UIBarButtonItem alloc]
     initWithBarButtonSystemItem:UIBarButtonSystemItemEdit 
     target:self action:@selector(performEdit:)];

    self.editButton = newEditButton;
    [newEditButton release];

    self.navigationItem.rightBarButtonItem = self.editButton;

    UIBarButtonItem *newDoneButton = 
    [[UIBarButtonItem alloc]
     initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
     target:self action:@selector(performDone:)];

    self.doneButton = newDoneButton;
    [newDoneButton release];

    UIBarButtonItem *newAddButton = 
    [[UIBarButtonItem alloc]
     initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
     target:self action:@selector(performAdd:)];

    self.addButton = newAddButton;
    [newAddButton release];
    self.navigationItem.leftBarButtonItem = self.addButton;

}

тогда у меня есть эти 3 как так называемые функции "обратного вызова" для кнопок:

- (void)performDone:(id)paramSender
{
    [self.tableView setEditing:NO animated:YES];


    [self.navigationItem setRightBarButtonItem:self.editButton
                                      animated:YES];

    [self.navigationItem setLeftBarButtonItem:self.addButton
                                      animated:YES];
}

- (void)performEdit:(id)paramSender
{
    NSLog(@"Callback Called");
    [self.tableView setEditing:YES animated:YES];

    [self.navigationItem setRightBarButtonItem:self.doneButton
                                      animated:YES];

    [self.navigationItem setLeftBarButtonItem:self.doneButton
                                     animated:YES];
}

- (void)performAdd:(id)paramSender
{
    [self.tableView setEditing:YES animated:YES];

    [self.navigationItem setRightBarButtonItem:self.doneButton
                                      animated:YES];

    [self.navigationItem setLeftBarButtonItem:self.doneButton
                                      animated:YES];
}

и вот где я «должен» определить, является ли это операцией добавления или удаления:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView 
           editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *output = (isDeleting) ? @"Deleting" : @"Adding";

    NSLog(@"%@", output);

    UITableViewCellEditingStyle result = UITableViewCellEditingStyleNone;

    if ([tableView isEqual:self.tableView]){
        if (self.isDeleting == YES){
            result = UITableViewCellEditingStyleDelete;
        }
        else{
            result = UITableViewCellEditingStyleInsert;
        }
    }

    return result;
}

однако, я не знаю, где я должен установить self.isDeleting и self.isAdding. Я попытался установить их в обратных вызовах, но кажется, что tableView: cellEditingStyleForRowAtIndexPath: вызывается первым, и в моем viewDidLoad значение по умолчанию для них - NO.

Так как мне правильно установить значения isAdding и isDeleting, чтобы я мог действовать соответствующим образом в tableView: cellEditingStyleForRowAtIndexPath: method?

Заранее спасибо!

1 Ответ

1 голос
/ 10 сентября 2011

Если у вас есть кнопка «Добавить» на панели навигации, почему бы просто не запустить действие «добавить», когда она нажата, вместо того, чтобы сделать просмотр таблицы редактируемым?Также нет особого смысла устанавливать стиль редактирования ячейки на UITableViewCellEditingStyleInsert, когда в этой ячейке есть контент.Обычный процесс заключается в том, чтобы либо иметь кнопку «Добавить» вне таблицы (например, в панели навигации), которая выполняет действие добавления, либо в качестве последней (или первой) ячейки внутри таблицы, когда она находится в стиле редактирования, и когда это происходит.ячейка нажата, действие добавления выполнено.

Таким образом, вы можете либо удерживать кнопку «Добавить» на панели навигации и делать все ячейки редактируемыми с помощью UITableViewCellEditingStyleDelete, либо сохранять только кнопки «Редактировать» / «Готово» и при редактировании добавить новую ячейку (в то время как табличное представление является редактируемым), которое будет редактироваться с помощью UITableViewCellEditingStyleInsert.

Примечание: вместо if ([tableView isEqual:self.tableView]) лучше использовать if (tableView == self.tableView), так как вы хотите проверить, является ли это тем же экземпляром, а не еслиони равны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...