我想在用户点击UITextField时显示自定义键盘。但同时我想在文本字段中显示光标。如果为canBecomeFirstResponder返回NO,则它不显示默认键盘,但也不显示光标。
有人可以帮帮我吗?
感谢。
答案 0 :(得分:5)
问题的答案是为自定义键盘创建一个视图,然后编辑UITextField的inputView
属性,并将其传递给自定义键盘的视图。
我希望有所帮助。
答案 1 :(得分:4)
看起来像你想要的是带有自定义键盘的UITextField。创建类CustomKeyboard : UIView
并添加按钮/布局视图。然后,对于textfield,只需将inputView属性设置为CustomKeyboard类textField.inputView = customKeyboard;
的实例。您还需要将inputView属性设置为readwrite @property (readwrite, retain) UIView *inputView;
通过设置inputView属性,当文本字段成为第一响应者时,标准iPhone键盘将不会出现。
答案 2 :(得分:4)
覆盖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;
}
答案 3 :(得分:2)
注册为键盘通知观察者(例如,在要隐藏键盘的视图控制器中): -
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideKeyboard:) name:UIKeyboardWillShowNotification object:nil];
放入hideKeyboard:function: -
-(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;
}
}
}
}
答案 4 :(得分:0)
我不确定这一点,但为什么不使用具有相同文本字段内容的UILabel并将其装饰成看起来像带有光标的文本字段。如果需要输入,请将其换成UITextField。
答案 5 :(得分:0)
您的问题有两种解决方案。 1)将键盘的alpha设置为0将使键盘不可见......这可能就是你想要的。光标将出现。
2)UITextField实现UITextInputTraits协议。当它成为第一个响应者时,它总是会调用键盘。您将需要继承它或其他类来更改默认行为。
祝你好运。如果你告诉我们你想要完成什么,我们可能会建议一种更优雅的方式来完成它。
玩得开心。
答案 6 :(得分:0)
我看到了两种解决方案-创建自定义动画(并根据文本字段的第一响应者状态停止或启动动画),或使用inputView属性播放。
这是inputView方法的解决方案:
将inputView
的{{1}}属性设置为空视图,并要求它成为第一响应者。这将有效地隐藏默认的UITextField
(例如键盘),但将继续显示闪烁的光标。
添加轻击手势识别器,当用户轻击UITextField时,将inputView属性设置为自定义键盘,关闭键盘并要求UITextField再次成为第一响应者。
inputView
答案 7 :(得分:-1)
为什么你甚至需要光标? 我认为您需要做的就是,当用户在您自己的键盘上按键时,您可以更新输入的文本值。