编辑现有的tableview行以输入新文本

时间:2015-09-17 15:19:46

标签: ios objective-c uitableview

我有一个tableview,通过在文本字段中输入数据并单击添加按钮来填充。

我已经通过将tableview的编辑模式设置为YES,将删除和重新排序功能实现到tableview。这适用于单击编辑按钮。

现在我希望能够选择一行,显示文本字段中所选行的文本,编辑该文本并将新文本添加到同一行索引。什么是最好的方法。

更新 我正在使用didSelectRowAtIndexPath来选择行并更新addEditButton方法中所选行中的文本,如答案中所建议的那样。我在选择行时将“添加成分”按钮更改为“更新”。

但是当我点击“更新”按钮时,应用程序崩溃了。我不确定我做错了什么。有人可以建议使用代码,我该如何实现编辑功能?

这是我的新代码:

//Edit a row in the tableview
- (void)tableView:(UITableView *)iTableView didSelectRowAtIndexPath:(NSIndexPath *)iIndexPath
{
    [iTableView deselectRowAtIndexPath:iIndexPath animated:NO];

    UITableViewCell *cell = [self.ingredientsTableView cellForRowAtIndexPath:iIndexPath];
    if (cell.selected) {
        //change the text of the add indredient button to Update
        [self.addUpdateButton setTitle:@"Update" forState:UIControlStateNormal];

        //show the cancel button
        [self.cancelUpdateButton setHidden:NO];

        self.ingredientTextField.text = self.ingredientItems[iIndexPath.row];
        //self.recipeIndex = iIndexPath.row;
        self.selectedCellIndexPath = iIndexPath;

    }
}
//Add text in tableview
- (IBAction)addIngredient:(id)sender
{
    //Add ingredients
    if ([self.addUpdateButton.titleLabel.text isEqualToString: @"Add Ingredient"]) {
        if ([self.ingredientTextField.text length] != 0) {
            //when button clicked add the text to the ingredientItems
            [self.ingredientItems addObject:self.ingredientTextField.text];
            [self.ingredientsTableView reloadData];
            self.ingredientTextField.text = @"";
            [self.ingredientTextField resignFirstResponder];
        }
        //Update the selected row ingredient
    } else if ([self.addUpdateButton.titleLabel.text isEqualToString:@"Update"])
               {
                   //the row selected should be updated with the new text
                   //remove the previous object from the array and add the new one on the same index and the same row
                   [self.ingredientItems removeObject:self.selectedCellIndexPath];
                   [self.ingredientItems addObject:self.ingredientTextField.text];

                   [self.ingredientsTableView beginUpdates];
                   [self.ingredientsTableView reloadRowsAtIndexPaths:@[self.selectedCellIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
                   [self.ingredientsTableView endUpdates];
               }

}

以下是视图控制器的屏幕截图

enter image description here

1 个答案:

答案 0 :(得分:0)

这是你如何实现这个目标的:

步骤1:点击单元格后,使用单元格配方文本加载文本字段。保存单元格索引&索引路径。

- (void)tableView:(UITableView *)iTableView didSelectRowAtIndexPath:(NSIndexPath *)iIndexPath {
    [iTableView deselectRowAtIndexPath:iIndexPath animated:NO];

    self.ingredientTextField.text = self.ingredientItems[iIndexPath.row];
    self.selectedCellIndexPath = iIndexPath;
}

步骤2:更新单元格中的文本并更新模型。  我假设您可以使用self.selectedCellIndexPath.row更新self.ingredientItems

第3步:现在重新加载受影响的单元格。

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[self.selectedCellIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[self.tableView endUpdates];