2015-03-21 4 views
0

Я использую пользовательское делегирование с моим UITextField в пользовательском UITableViewCell. В основном у меня UITextFields на моем UITableView, и в режиме редактирования я хочу иметь возможность редактировать содержимое внутри UITextField.UITextField в ячейке UITableView ведет себя странно с shouldChangeCharactersInRange

Моя проблема заключается в том, что когда я перехожу в режим редактирования и пытаюсь ввести что-то в текстовое поле, я могу только набрать один символ, и он удваивается. В этом примере я попытался ввести «p», и он позволяет мне вводить «p», и он изменяется на «pp». enter image description here

Вот мой код. Как FYI я довольно новичок в 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; 
} 

Кстати я понимаю, что выше, вероятно, ISN Пока я не обновляю свои данные, я еще не понял этого, поэтому любой совет будет замечательным.

ответ

2

Проблема заключается в том, что вы вызываете ваш updatedFoodItem: метод , а затем возвращение YES в вашей shouldChangeCharactersInRange: функции. По сути то, что происходит это:

1 - shouldChangeCharactersInRange: называется

2 - Эта функция вызывает updatedFoodItem:

3 - updatedFoodItem: функция устанавливает cell «сек текстового поля к исходному тексту принятого в

4 - Метод shouldChangeCharactersInRange: возвращает YES, добавив тот же текст, который был только что установлен в функции updatedFoodItem:, к метке ячейки

Я не уверен, что вы пытаетесь сделать (может быть, вы пытаетесь сохранить товар в своем self.menuItemsArray?), Но вам не следует устанавливать текст ячейки в функции updatedFoodItem:, или вы должны return NO в вашей функции shouldChangeCharactersInRange:.

+0

Полезно, спасибо ... –

Смежные вопросы