UITextField in UITableViewCell - Hinzufügen neuer Zellen

Ich versuche, eine Tabellenansicht zu erstellen, die der Ansicht des YouTube-Video-Uploaders in der Fotogalerie auf dem iPhone ähnelt.

Hier ist die Grundeinstellung.

Ich habe eine benutzerdefinierte UITableViewCell erstellt, die ein UITextField enthält. Das Anzeigen der Zelle in meiner Tabelle funktioniert hervorragend und ich kann den Text problemlos bearbeiten. Ich habe einen Ereignis-Hook erstellt, damit ich sehen kann, wann sich der Text im Textfeld geändert hat.

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]

Was ich tun möchte, ist dies. Wenn der Benutzer den Text zum ersten Mal bearbeitet, möchte ich eine neue Zelle in die Tabellenansicht unterhalb der aktuellen Zelle einfügen (newIndexPath wird vor der richtigen Position berechnet):

[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationBottom];
[self.tableView endUpdates];

Das Problem ist, dass beim Ausführen des Zelleneinfügungscodes die Zelle erstellt wird, der Text des Textfelds jedoch kurz aktualisiert wird. Anschließend wird die Tastatur geschlossen und das Textfeld auf eine leere Zeichenfolge zurückgesetzt.

Jede Hilfe wäre super! Ich habe den ganzen Tag über meinen Kopf geschlagen.

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
    if (section == 0)
        return 2;
    else
        return self.tags.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    cell = (SimpleTextFieldTableCell *)[tableView dequeueReusableCellWithIdentifier:tagCellIdentifier];

    if (cell == nil)
    {
        cell = [[[NSBundle mainBundle] loadNibNamed:@"SimpleTextFieldTableCell" owner:nil options:nil] lastObject];
    }

    ((SimpleTextFieldTableCell *)cell).textField.delegate = self;
    ((SimpleTextFieldTableCell *)cell).textField.tag = indexPath.row;
    ((SimpleTextFieldTableCell *)cell).textField.text = [self.tags objectAtIndex:indexPath.row];
    [((SimpleTextFieldTableCell *)cell).textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

- (void)textFieldDidChange:(id)sender
{
    UITextField *textField = sender;

    [self.tags replaceObjectAtIndex:textField.tag withObject:textField.text];
    if (textField.text.length == 1)
    {
        [textField setNeedsDisplay];
        [self addTagsCell];
    }
}

- (void)addTagsCell
{
    NSString *newTag = @"";
    [self.tags addObject:newTag];

    NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:self.tags.count - 1 inSection:1];
    [self.tableView beginUpdates];
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationBottom];
    [self.tableView endUpdates];
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage