У меня есть пользовательская клавиатура, которую я использую для редактирования текста в mytextField
, и он отлично работает. Тем не менее, я никогда не могу заставить делегата shouldChangeCharactersInRange
выполнить свою собственную клавиатуру. Он выполняется, когда я использую свою фактическую клавиатуру (очевидно, это не клавиатура iPhone по умолчанию, поскольку у меня установлен mytextField.inputView = numberPad.view). Что мне делать, чтобы заставить делегата shouldChangeCharactersInRange
запускать пользовательскую клавиатуру? BTW, пользовательская клавиатура - это всего лишь пучок кнопок.Как я могу заставить UITextFieldDelegate.shouldChangeCharactersInRange запускать пользовательский inputView?
- (void) numberPadPressed: (UIButton *)sender {
[mytextField insertText:[[NSNumber numberWithInt:sender.tag] stringValue]];
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];
NSLog(@"shouldChangeCharactersInRange: %@", resultingString);
return true;
}
- (void)viewDidLoad {
mytextField.text = @"";
mytextField.inputView = numberPad.view;
mytextField.delegate = self;
[mytextField becomeFirstResponder];
}
Я только что проверил, используя ваше предложение выше, но все равно shouldChangeCharactersInRange не срабатывал при вызове numberPadPressed. Я думаю, что мы на правильном пути ... – docchang
Как рассчитать диапазон? Есть ли способ переместить курсор в любую конкретную позицию в TextField? – docchang
Я обновил образец кода. Используйте [mytextField selectedRange], чтобы получить выбранный диапазон, который будет просто точкой вставки, если нет выбора, или будет диапазон символов, если есть выбор. –