当用户点击UITextField时,我想显示自定义键盘。但同时我想在文本字段中显示光标。如果我返回NO给canBecomeFirstResponder,则不会显示默认键盘,但也不会显示光标。
有人可以帮帮我吗?
谢谢。
当用户点击UITextField时,我想显示自定义键盘。但同时我想在文本字段中显示光标。如果我返回NO给canBecomeFirstResponder,则不会显示默认键盘,但也不会显示光标。
有人可以帮帮我吗?
谢谢。
请在UITextFieldDelegate中覆盖以下两种方法。请注意,这种方法适用于UITextField和UITextView(在这种情况下,您需要覆盖UITextViewDelegate中相应的方法)。
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
if (!textField.inputView) {
//hides the keyboard, but still shows the cursor to allow user to view entire text, even if it exceeds the bounds of the textfield
textField.inputView = [[UIView alloc] initWithFrame:CGRectZero];
}
return YES;
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
return NO;
}
CustomKeyboard:UIView
并添加按钮/布局视图。然后,对于你的textfield,只需将inputView属性设置为CustomKeyboard类的实例textField.inputView = customKeyboard;
。你还需要将inputView属性设置为可读写@property(readwrite,retain) UIView * inputView;
。通过设置inputView属性,当textfield成为第一响应者时,标准的iPhone键盘将不会出现。[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard:) name:UIKeyboardWillShowNotification object:nil];
-(void)hideKeyboard:(NSNotification *)notification {
for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) {
for (UIView *keyboard in [keyboardWindow subviews]) {
if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES) {
keyboard.alpha = 0;
}
}
}
}
我不确定你的意思,但为什么不使用一个UILabel,其内容与文本字段相同,并装饰成带有光标的文本字段外观。当需要输入时,将其替换为UITextField。
你的问题有两个解决方案。 1)将键盘的alpha设置为0将使键盘不可见...这可能是你想要的全部。光标将出现。
2)UITextField实现了UITextInputTraits协议。当它成为第一响应者时,它将始终调用键盘。您需要从它或另一个类继承来更改该默认行为。
祝你好运。
如果你告诉我们你想要实现什么,我们可能会建议更优雅的方法来实现它。
玩得开心。
我看到两种解决方案 - 要么创建自定义动画(并根据文本字段的第一响应者状态停止或启动它),要么使用inputView属性进行操作。
这里是一种inputView方法的解决方案:
将UITextField
的inputView
属性设置为空视图,并要求它成为第一响应者。这将有效地隐藏默认的inputView
(即键盘),但仍会显示闪烁的光标。
添加Tap手势识别器,当用户点击UITextField
时,将inputView
属性设置为您的自定义键盘,关闭键盘并再次要求UITextField
成为第一响应者。
class BlinkingTextFieldVC: UIViewController {
var blinkingTextField: UITextField!
override func onViewDidLoad() {
setupView()
}
func setupView() {
blinkingTextField = UITextField()
blinkingTextField.inputView = UIView() // 空视图将显示为输入法
blinkingTextField.becomeFirstResponder()
let tapGuesture = UITapGestureRecognizer(target: self, action: #selector(blinkingTextFieldTapped(_:)))
blinkingTextField.addGestureRecognizer(tapGuesture)
}
func blinkingTextFieldTapped(_ gesture: UITapGestureRecognizer) {
if gesture.state == .ended {
view.endEditing(true)
blinkingTextField.inputView = nil // 设置您的自定义输入视图或默认键盘的nil
blinkingTextField.becomeFirstResponder()
}
}
}
你为什么需要光标呢? 我认为你只需要在用户按下键盘上的任意键时,更新输入框的文本值即可。