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

iPhone-可能不显示键盘,但仍在UITextField中显示光标?,iphone,uitextfield,Iphone,Uitextfield,我有一个自定义键盘,希望在用户点击UITextField时显示。但同时我想在文本字段中显示光标。如果为canBecomeFirstResponder返回NO,则不会显示默认键盘,但也不会显示光标 有人能帮我吗 谢谢。我不太清楚这一点,但为什么不使用一个UILabel,它的文本字段内容相同,并且经过修饰,看起来像您的文本字段,其中有一个光标。需要输入时,将其替换为UITextField。注册为键盘通知观察者(例如,在要隐藏键盘的视图控制器中):- 放入隐藏板:功能:- -(void)hideKey

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

有人能帮我吗


谢谢。

我不太清楚这一点,但为什么不使用一个UILabel,它的文本字段内容相同,并且经过修饰,看起来像您的文本字段,其中有一个光标。需要输入时,将其替换为UITextField。

注册为键盘通知观察者(例如,在要隐藏键盘的视图控制器中):-

放入隐藏板:功能:-

-(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;
            }
        }
    }
}
-(无效)隐藏板:(NSNotification*)通知{
用于[[UIApplication sharedApplication]windows]中的(UIWindow*键盘窗口){
用于(UIView*键盘位于[键盘窗口子视图]){

如果([[keyboard description]hasPrefix:@“有两种解决方案。 1) 将键盘的alpha设置为0将使键盘不可见…这可能是您想要的。光标将出现

2) UITextField实现UITExtraits协议。当它成为第一响应程序时,它将始终调用键盘。您需要从它或另一个类继承以更改默认行为

祝你好运

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


玩得开心。

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

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


我希望这会有所帮助。

似乎您想要的是一个带有自定义键盘的UITextField。创建类
CustomKeyboard:UIView
,并在视图中添加按钮/布局。然后,对于您的textfield,只需将inputView属性设置为类CustomKeyboard
textfield.inputView=CustomKeyboard;
。您需要将inputView属性设置为readwrite以及
@property(readwrite,retain)UIView*inputView;
通过设置inputView属性,当textfield成为第一响应者时,标准iPhone键盘将不会出现。

覆盖UITextFieldDelegate中的以下两种方法。请注意,这种方法对UITextField和UITextView都有效(在这种情况下,您将重写UITextViewDelegate中的相应方法)


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

以下是inputView方法的解决方案:

  • UITextField
    inputView
    属性设置为空视图,并要求其成为第一响应者。这将有效隐藏默认
    inputView
    (即键盘),但将继续显示闪烁的光标

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

    class BlinkingTextFieldVC: UIViewController {
    
    var blinkingTextField: UITextField!
    
    override func onViewDidLoad() {
        setupView()
    }
    
    func setupView() {
        blinkingTextField = UITextField()
    
        blinkingTextField.inputView = UIView() // empty view will be shown as input method
        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 // set your custom input view or nil for default keyboard
            blinkingTextField.becomeFirstResponder()
        }
    }
    
    }
    

  • 如果没有键盘,UITextField中的光标有何用处?不会太多,这可能是它不受支持的功能的原因。有一个自定义键盘。这就是为什么我不希望显示默认键盘,但仍然希望光标让用户知道他在哪里输入文本。这肯定有用。雪莉,你找到答案了吗?检查是否有这篇文章对你有任何有用的信息。我不想显示默认键盘。我如何在UILabel中显示光标?啊,你是说你的自定义键盘本身不是键盘,它只是一组按钮,所以你想伪造整件事?在iOS4中对我不起作用。该方法被调用,但没有视图有UIKe前缀yboardthnx happy..非常有用我想在我的文本字段中显示光标闪烁,而不显示键盘,它的工作方式非常简单..如果您不需要自定义键盘功能(可能您的文本输入非常非正统),那么创建一个虚拟UIView(不指定框架)使.inputView正常工作。然后在文本字段中调用becomeFirstResponder。
    - (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;
    }
    
    class BlinkingTextFieldVC: UIViewController {
    
    var blinkingTextField: UITextField!
    
    override func onViewDidLoad() {
        setupView()
    }
    
    func setupView() {
        blinkingTextField = UITextField()
    
        blinkingTextField.inputView = UIView() // empty view will be shown as input method
        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 // set your custom input view or nil for default keyboard
            blinkingTextField.becomeFirstResponder()
        }
    }
    
    }