doc*_*ang 9 delegates uitextfield ios
我有一个自定义键盘,我用来编辑文本mytextField,它很棒.但是,我永远不能让shouldChangeCharactersInRange代理使用我的自定义键盘执行.它在我使用我的实际键盘时执行(显然不是默认的iPhone键盘,因为我设置了mytextField.inputView = numberPad.view).我该怎么做才能使shouldChangeCharactersInRange代表使用自定义键盘触发?顺便说一句,自定义键盘只是一堆按钮.
- (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];
}
Run Code Online (Sandbox Code Playgroud)
jpt*_*ung 11
您永远不会shouldChangeCharactersInRange使用自定义键盘进行调用.
你能得到的是事件UIControlEventEditingChanged的UITextField.因此shouldChangeCharactersInRange,您应该依赖于此事件,而不是依赖于方法(此外已知有错误),每次用户更改文本字段的内容时都会触发此事件.
[textField addTarget:self action:@selector(myTextfieldChangedMethod:) forControlEvents:UIControlEventEditingChanged];
Run Code Online (Sandbox Code Playgroud)
如果您使用自定义键盘修改文本字段,只需调用此方法以通知所有事件的侦听器UIControlEventEditingChanged.
[textField sendActionsForControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)
编辑:抱歉,之前误解了您的问题。
您的文本字段在从系统键盘shouldChangeCharactersInRange获取输入时调用,让您有机会确定文本是否应该实际显示(例如,您可以实现它来识别快捷方式并插入一些较长的文本)。但文本字段无法将自定义视图中的输入识别为文本输入。
如果您有自定义 inputView,则无需调用此方法 - 只需直接从 IBAction 更新文本字段即可:
- (IBAction) numberPadPressed: (UIButton *)sender {
NSString *newText = [[mytextField text] stringByReplacingCharactersInRange:[mytextField selectedRange] withString:string];
[mytextField setText:newText];
}
Run Code Online (Sandbox Code Playgroud)