我在這裏有一個奇怪的問題。我有一個使用自定義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