iPhone - 可能不显示键盘但仍然在UITextField中显示光标?

时间:2010-04-04 07:01:44

标签: iphone uitextfield

我想在用户点击UITextField时显示自定义键盘。但同时我想在文本字段中显示光标。如果为canBecomeFirstResponder返回NO,则它不显示默认键盘,但也不显示光标。

有人可以帮帮我吗?

感谢。

8 个答案:

答案 0 :(得分:5)

问题的答案是为自定义键盘创建一个视图,然后编辑UITextFieldinputView属性,并将其传递给自定义键盘的视图。

我希望有所帮助。

答案 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;
            }
        }
    }
}

(感谢this post中的luvieere向我展示如何获取键盘)

答案 4 :(得分:0)

我不确定这一点,但为什么不使用具有相同文本字段内容的UILabel并将其装饰成看起来像带有光标的文本字段。如果需要输入,请将其换成UITextField。

答案 5 :(得分:0)

您的问题有两种解决方案。 1)将键盘的alpha设置为0将使键盘不可见......这可能就是你想要的。光标将出现。

2)UITextField实现UITextInputTraits协议。当它成为第一个响应者时,它总是会调用键盘。您将需要继承它或其他类来更改默认行为。

祝你好运。

如果你告诉我们你想要完成什么,我们可能会建议一种更优雅的方式来完成它。

玩得开心。

答案 6 :(得分:0)

我看到了两种解决方案-创建自定义动画(并根据文本字段的第一响应者状态停止或启动动画),或使用inputView属性播放。

这是inputView方法的解决方案:

  1. inputView的{​​{1}}属性设置为空视图,并要求它成为第一响应者。这将有效地隐藏默认的UITextField(例如键盘),但将继续显示闪烁的光标。

  2. 添加轻击手势识别器,当用户轻击UITextField时,将inputView属性设置为自定义键盘,关闭键盘并要求UITextField再次成为第一响应者。

    inputView

答案 7 :(得分:-1)

为什么你甚至需要光标? 我认为您需要做的就是,当用户在您自己的键盘上按键时,您可以更新输入的文本值。