【问题标题】:UITextField in UITableView cell behaving strangely with shouldChangeCharactersInRangeUITableView 单元格中的 UITextField 与 shouldChangeCharactersInRange 行为异常
【发布时间】:2015-03-21 06:23:08
【问题描述】:

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

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

这是我的代码。作为一个仅供参考,我对 iOS/编程/自定义委托/自定义 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;
}

顺便说一句,我意识到上面可能还没有更新我的数据,我还没有弄清楚,所以任何建议都会很棒。

【问题讨论】:

    标签: ios uitableview uitextfield uitextfielddelegate


    【解决方案1】:

    问题是您正在调用您的updatedFoodItem: 方法然后在您的shouldChangeCharactersInRange: 函数中返回YES。基本上正在发生的事情是:

    1 - shouldChangeCharactersInRange: 被调用

    2 - 这个函数调用updatedFoodItem:

    3 - updatedFoodItem: 函数将cell 的文本字段设置为传入的原始文本

    4 - shouldChangeCharactersInRange: 方法返回 YES,将刚刚在 updatedFoodItem: 函数中设置的相同文本附加到单元格的标签

    我不确定你到底想做什么(也许你想把食物保存到你的self.menuItemsArray?),但你不应该在updatedFoodItem:函数中设置单元格的文本,或者你应该在你的shouldChangeCharactersInRange:函数中返回NO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多