ios - 使用自定义 UITableViewCell 时,在编辑之前更改 UITextField 文本

标签 ios uitableview uitextfield

我这里有一个奇怪的问题。我有一个使用自定义 UITableViewCells 的 UITableView。除了特定问题之外,一切都按预期进行。

场景如下:

我需要在编辑开始之前删除 UITextField 中的“$”符号。这是通过 textFieldShouldBeginEditing: 方法完成的。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    LifeEarningsLineItemTableViewCell *cell = (LifeEarningsLineItemTableViewCell *)[self tableViewCellContainingObject:textField inTableView:self.lifeEarningsTableView];
    if (textField == cell.itemAmount) {
        /*Remove currency symbol for editing.*/
        NSString *currencySymbol = [self.currencyFormatter currencySymbol];
        NSMutableString *mutableText = [NSMutableString stringWithString:textField.text];
        [mutableText replaceOccurrencesOfString:currencySymbol withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [mutableText length])];
        textField.text = mutableText;
    }

    return YES;
}  

问题是这样的:

  • 不同行之间,从textField1移动到textField2(在不同的行中),“$”被删除,这是 .
  • 同一行中,从textField1移动到textField2,“$”没有被删除,这是不好

为什么同一行中的“$”没有被删除,而是不同行中的“$”被删除?

以下是该问题的直观表示:Issue

[编辑...添加]
我通过这些流程获取这些日志:

Flow1
应该开始......行:0,标签:0
应该开始......行:0,标签:1
已结束......行:0,标签:0
已结束......行:0,标签:1

Flow2
应该开始......行:0,标签:0
应该开始......行:1,标签:1
已结束......行:0,标签:0
已结束......行:1,标签:1

此外,这里是 tableViewCellContainingObject:inTableView:tableView 方法:

- (UITableViewCell *)tableViewCellContainingObject:(UIView *)view inTableView:(UITableView *)tableView {
    CGPoint objectRectInTableViewCoordinates = [tableView convertPoint:view.bounds.origin fromView:view];
    NSIndexPath *cellIndexPath = [tableView indexPathForRowAtPoint:objectRectInTableViewCoordinates];
    return [tableView cellForRowAtIndexPath:cellIndexPath];
}

以及 textFieldDidEndEditing 方法:

- (void)textFieldDidEndEditing:(UITextField *)textField {
    LifeEarningsLineItemTableViewCell *cell = (LifeEarningsLineItemTableViewCell *)[self tableViewCellContainingObject:textField inTableView:self.lifeEarningsTableView];
    LifeEarningsLineItem *lifeEarningsLineItem = [self.lifeEarningsFetchedResultsController objectAtIndexPath:[self.lifeEarningsTableView indexPathForCell:cell]];

    if (textField == cell.itemAmount) {
        NSNumber *absInteger = [NSNumber numberWithInteger:abs([textField.text integerValue])];
        textField.text = [self.currencyFormatter stringFromNumber:absInteger];
        lifeEarningsLineItem.amount = absInteger;
        [self sumAmountsAndDisplay];
    } else if (textField == cell.itemName) {
        lifeEarningsLineItem.name = textField.text;
    }
}

最佳答案

我认为你的解决方案(在编辑过程中解耦 FRC)可能有点激烈,并且可能会产生不可预见的影响。这里有一些替代建议。我假设问题是由在完成单元格中第一个字段的编辑后表格重新加载您正在编辑的行引起的。

  • 如果文本字段未进行编辑,请不要将货币符号存储在模型中,而是将其添加到 cellForRowAtIndexPath 中显示的文本中。当文本字段开始编辑时,将其文本直接设置为模型中的值。您无需在最终编辑中执行任何操作,因为重新加载将为您重新添加货币符号。
  • 如果您不想更改模型,则可以执行类似的操作 - 如果单元格正在编辑,则在 cellForRowAtIndexPath 中删除货币符号。
  • 存储当前编辑行的索引路径,并有条件地忽略 FRC 委托(delegate)方法中对此行的更改。

关于ios - 使用自定义 UITableViewCell 时,在编辑之前更改 UITextField 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9895699/

相关文章:

ios - Xcode 6.3 beta - 您的可执行文件包含不受支持的架构 '[armv7k]'

ios - 当从 UITableView 中删除以编程方式自定义的 UITableViewCell 时,约束会中断

ios - 如何从 UIView 子类调用 UIViewController?

ios - 在 UITextField 中输入满分 10 分?

arrays - 更改数组后无法在 Tableview 中重新加载数据?

iphone - 更改 contentInset 后强制 UITextView 重新显示?

ios - iOS 上的 Dropbox API 无法链接

ios - UIWebView 仅在添加到 View 时才起作用

iOS 应用程序传输

ios - 选择表格 View 单元格中的文本并返回到上一个 View