Метод textField:shouldChangeCharactersInRange:replacementString:
является частью протокола UITextFieldDelegate
, поэтому вам необходимо установить делегата для этих UITextField
с.
Например, если вы создавали UITextField
s в коде контроллера табличного представления и предполагали, что метод был реализован в том же контроллере, вы можете сделать это:
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(x,y,w,h)];
[textField setDelegate:self];
Однако вы говорите, что загружаете UITableViewCell
s из файлов XIB. Вы должны каким-то образом получить доступ к UITextField
s внутри кода и вызвать для них метод setDelegate:
. Вы можете сделать это, используя UIView
's subviews
свойство. Например:
UIViewController *controller = [[UIViewController alloc] initWithNibName:@"foo" bundle:nil];
UITextField *textField = (UITextField *)[[controller.view subviews] objectAtIndex:0];
Хотя создание UITextField
в коде намного проще и элегантнее, ИМХО.
Что касается переопределения метода canPerformAction:sender:
, для этого вам потребуется подкласс UITextField
.