Добавить ячейку в нижней части UITableView в iOS - PullRequest
8 голосов
/ 26 марта 2012

Я использую xcode 4.2 с раскадровкой для создания приложения для iphone.

Когда я нажимаю кнопку редактирования в верхнем правом углу, я хотел бы иметь возможность удалить существующие строки и увидеть дополнительную ячейку (с зеленым значком «+») вверху, которая позволила бы мне добавить новая ячейка.

У меня есть массив, который заполняется методом viewDidLoad с использованием CoreData

Я включил кнопку настроек

self.navigationItem.rightBarButtonItem = self.editButtonItem;

И реализованный способ

- (void)tableView:(UITableView *)tableView commitEditingStyle:   
          (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:
                   (NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // removing a cell from my array and db here... 
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // adding a cell to my array and db here...
    }   
}

Я понимаю, что в какой-то момент мне нужно добавить ячейку, которую я могу затем отредактировать, но мне не ясно, где и я не могу найти объяснение в Интернете.

Ответы [ 2 ]

20 голосов
/ 26 марта 2012

Хорошо, основная идея заключается в том, что при нажатии кнопки редактирования мы будем показывать элементы управления удалением рядом с каждой строкой и добавляем новую строку с элементом управления добавлением, чтобы пользователи могли щелкнуть по нему, чтобы добавить право записи? Во-первых, поскольку у вас уже есть настройка кнопки редактирования, давайте проинструктируем нашу таблицу, что в режиме редактирования мы должны показать дополнительную строку. Мы делаем это в нашем tableView:numberOfRowsInSection:

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.editing ? a_recs.count + 1 : a_recs.count;
}

a_recs вот массив, который я настроил для хранения наших записей, так что вам придется отключить его своим собственным массивом. Далее мы сообщаем нашим tableView:cellForRowAtIndexPath:, что делать с дополнительной строкой:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *CellIdentifier = @"Cell";
    BOOL b_addCell = (indexPath.row == a_recs.count);
    if (b_addCell) // set identifier for add row
        CellIdentifier = @"AddCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        if (!b_addCell) {
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }
    }

    if (b_addCell)
        cell.textLabel.text = @"Add ...";
    else
        cell.textLabel.text = [a_recs objectAtIndex:indexPath.row];

    return cell;
}

Мы также хотим указать нашей таблице, что для этой строки добавления нам нужен значок добавления:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == a_recs.count) 
        return UITableViewCellEditingStyleInsert;
    else
        return UITableViewCellEditingStyleDelete;
}

масло. Теперь супер секретный соус кунг-фу, который скрепляет все вместе палочками для еды:

-(void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    [self.tableView setEditing:editing animated:animated];
    if(editing) {
        [self.tableView beginUpdates];
        [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
        [self.tableView endUpdates];        
    } else {
        [self.tableView beginUpdates];
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:a_recs.count inSection:0]] withRowAnimation:UITableViewRowAnimationLeft];
        [self.tableView endUpdates];
        // place here anything else to do when the done button is clicked

    }
}

Удачи и приятного аппетита!

4 голосов
/ 26 марта 2012

Этот учебник стоит прочитать и должен помочь вам. В нем показано, как настроить строку UITableView «Добавить новую строку» в нижней части UITableView, но вы должны иметь возможность сделать так, чтобы это отображалось в верхней части вашего UITableView в вашей реализации:

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

, например

if(self.editing && indexPath.row == 1)
{
    cell.text = @"Insert new row";
    ...

Надеюсь, это поможет!

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