ios - UITableView 单元格中的 UITextField 与 shouldChangeCharactersInRange 行为异常

标签 ios uitableview uitextfield uitextfielddelegate

我在自定义 UITableViewCell 中将自定义委托(delegate)与我的 UITextField 结合使用。基本上我的 UITableView 上有 UITextFields,在编辑模式下,我希望能够编辑 UITextField 中的内容。

我的问题是,当我进入编辑模式并尝试在文本字段中键入内容时,我只能键入一个字符,而且它会加倍。在这个例子中,我尝试输入“p”,它只让我输入“p”,然后它变成了“pp”。 enter image description here

这是我的代码。仅供引用,我对 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/

相关文章:

iphone - iOS GameCenter、AVAsset 和音频流

iphone - 充电完成前的剩余时间,iOS

ios - 下载数据后 TableView 未更新

ios - 调整 UITableViewCell 的大小以适应内容性能

c - Unity UI Slider 改变UI Text

android - 迁移到新 Admob 后的 ECPM

ios - iPhone 无法调用 tableView 函数

ios - 文本和详细文本标签之间的 UITableView 填充(ios、xamarin)

ios - 禁用编辑文本字段

ios - 在 iOS 中未填充所有 UITextField 时尝试禁用按钮