我在自定义 UITableViewCell 中将自定义委托(delegate)与我的 UITextField 结合使用。基本上我的 UITableView 上有 UITextFields,在编辑模式下,我希望能够编辑 UITextField 中的内容。
我的问题是,当我进入编辑模式并尝试在文本字段中键入内容时,我只能键入一个字符,而且它会加倍。在这个例子中,我尝试输入“p”,它只让我输入“p”,然后它变成了“pp”。
这是我的代码。仅供引用,我对 iOS/编程/自定义委托(delegate)/自定义 UITableViewCells 还很陌生。
UITableViewCell 子类.h:
@protocol MenuTableViewCellDelegate <NSObject>
- (void)updatedFoodItem:(NSString *)foodItem fromCell:(id)sender;
@end
@interface MenuTableViewCell : UITableViewCell <UITextFieldDelegate>
@property (nonatomic, weak) id <MenuTableViewCellDelegate> delegate;
@property (weak, nonatomic) IBOutlet UITextField *foodTextField;
@property (weak, nonatomic) IBOutlet UITextField *priceTextField;
@end
UITableViewCell.m:
- (void)awakeFromNib {
self.foodTextField.delegate = self;
}
// Delegate method for tableview cell - food item text field is within cell.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
[self.delegate updatedFoodItem:string fromCell:self];
return YES;
}
在我的 ViewController.m 中:
- (void)updatedFoodItem:(NSString *)foodItem fromCell:(MenuTableViewCell *)cell
{
NSIndexPath *p = [self.menuTableView indexPathForCell:cell];
id item = self.menuItemsArray[p.row];
cell.foodTextField.text = foodItem;
}
顺便说一下,我意识到上面可能还没有更新我的数据,我还没有弄明白,所以任何建议都会很好。
最佳答案
问题是您正在调用 updatedFoodItem:
方法然后在您的shouldChangeCharactersInRange:
中返回YES
> 功能。本质上发生的事情是:
1 - shouldChangeCharactersInRange:
被调用
2 - 此函数调用 updatedFoodItem:
3 - updatedFoodItem:
函数将 cell
的文本字段设置为传入的原始文本
4 - shouldChangeCharactersInRange:
方法返回 YES
,将刚刚在 updatedFoodItem:
函数中设置的相同文本附加到单元格的标签
我不确定你到底想做什么(也许你想把食物保存到你的self.menuItemsArray
?),但你要么不设置单元格的updatedFoodItem:
函数中的文本,或者您应该在 shouldChangeCharactersInRange:
函数中返回 NO
。
关于ios - UITableView 单元格中的 UITextField 与 shouldChangeCharactersInRange 行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29179883/