我在这里有一个奇怪的问题。我有一个使用自定义UITableViewCells的UITableView。除特殊问题外,一切都按预期工作。当使用自定义UITableViewCell编辑之前更改UITextField文本
这里的情景:
我需要删除“$”符号为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会移动到文字栏(在不同行)中, “$” 被去除,这是GOOD。
- 内相同行,从移动到textField1的文字栏位中, “$” 不删除,这是BAD。
为什么“$”不是在同一行内移除,而是在不同的行中移除?
这里是问题的可视化表示:
[编辑... ADDITION]
我得到这些日志与这些流程:
应该开始.....行:0,标签:0
应该开始.....行:0,标记:1
DID END .....行:0,标记:0
DID END .....行:0 ,标签:1
应该开始.....行:0,标签:0
应该开始.....行:1,标签:1
DID END .....行: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;
}
}
那么,它唯一可能的是由于某种原因(你不显示代码)'tableViewCellContainingObject:inTableView:'在这种情况发生时没有返回正确的单元格。 – lnafziger 2012-03-27 20:13:34
我通过'indexPathForCell:'通过日志语句检查过。它不仅记录了正确的行,还通过'theTextField.text'为这些UITextFields记录了正确的值。从上面的代码中,当我登录'textField.text'时,它实际上记录了正确的文本(没有“$”)!然而,它在视觉上显示“$”符号。仅供参考,这是通过模拟器(iOS 5.1)。 – Gobot 2012-03-27 20:35:07
如果您记录'textField.text'并显示正确的值,是否有机会从另一行删除$? – lnafziger 2012-03-27 20:56:14