TableViewController редактирование стиля и вставки - PullRequest
1 голос
/ 21 июня 2011

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/TableView_iPhone/ManageInsertDeleteRow/ManageInsertDeleteRow.html

Мне нужны опции вставки и удаления, так что ...

self.navigationItem.rightBarButtonItem = self.editButtonItem;
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addItem:)];
self.navigationItem.leftBarButtonItem = addButton;

Пока все хорошо. Я закончил программирование с «удалением», но у меня возникли проблемы с «вставкой»

   - (void)addItem:sender {
}

Что мне добавить внутри этого addItem, чтобы запустить «Режим редактирования» и изменить мой EditingStyle на UITableViewCellEditingStyleInsert? Какого черта этот iteminputcontroller, как видно из библиотеки Apple? Там нет никакого объяснения этому, и помощь расплывчата онлайн: (

Ответы [ 3 ]

5 голосов
/ 21 июня 2011

Вызовите функцию setEditing вашего tableView внутри вашего addItem метода.

- (void)setEditing:(BOOL)editing animated:(BOOL)animate

Должно быть как показано ниже.

- (void)addItem:sender {
   [myTableview setEditing:YES animated:YES];
}

Возврат UITableViewCellEditingStyleInsert из вашего editingStyleForRowAtIndexPathметод.

     - (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {

        if(someCondtion){
        return UITableViewCellEditingStyleInsert;
        } else {
        return UITableViewCellEditingStyleDelete;
        }
}

Обновление модели данных в соответствии с действиями редактирования, удаление или вставка.

- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
    forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
       //put code to handle deletion
       [myTableView reloadData];
    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
       //put code to handle insertion
       [myTableView reloadData];
    }
}
2 голосов
/ 21 июня 2011

Воспользуйтесь преимуществами встроенных функций, первый набор:

tableView.dataSource = self;
tableView.delegate = self;

И добавь в свой

- (void)addItem:sender {
     [tableview setEditing:YES animated:YES];
}

Затем просто переопределите этот метод

- (void)tableView:(UITableView *)tableView commitEditingStyle: UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
   {
       // If user deletes
       if (editingStyle == UITableViewCellEditingStyleDelete) 
       {
          //DELETE THE KEY FROM YOUR DATASOURCE AND THEN:
           [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
                  withRowAnimation:UITableViewRowAnimationFade]; //NICE EFFECT
       }
       else if(editingStyle == UITableViewCellEditingStyleInsert)
       {
           //ADD THE KEY TO YOUR DATASOURCE AND THEN:
           [tableView reloadData]; //THIS JUST RELOADS THE TABLE WITH YOUR DATASOURCE UPDATED       
       }
   }
1 голос
/ 21 июня 2011

Нет смысла иметь кнопку + , если она будет действовать как кнопка «Редактировать» ... верно?Таким образом, ваш метод addItem: должен реализовывать код для отображения нового представления, т.е. представлять контроллер представления для ввода сведений об элементе, который нужно добавить.(Я основываю этот пример на примере кода Apple):

- (void)addItem:(id)sender {
    // ItemInputController is a view controller used to display textFields, etc.
    // whatever you need for your new item... You have to write it, name it however you want
    ItemInputController *itemInputController = [[ItemInputController alloc] init];

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:itemInputController];

    [[self navigationController] presentModalViewController:navigationController animated:YES];

    [navigationController release];
    [itemInputController release];

}

В противном случае, чтобы использовать UITableViewCellEditingStyleInsert, вам нужно настроить ячейку на editingStyle = UITableViewCellEditingStyleInsert (например, последняя ячейка в вашемТаблица).Вы переходите в режим редактирования, нажав кнопку «Редактировать».Когда пользователь нажимает на ячейку «Добавить элемент», вы вызываете тот же код, что и в методе addItem:, как описано выше.

Надеюсь, это все прояснит для вас.

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