点击 UITextField 时没有出现 UIKeyboard

Posted

技术标签:

【中文标题】点击 UITextField 时没有出现 UIKeyboard【英文标题】:UIKeyboard not appearing when tapping on UITextField 【发布时间】:2014-06-14 01:46:07 【问题描述】:

我遇到了一个奇怪的问题,因为其他一切都很好。突然,当我编译我的应用程序并遇到这个问题时,当我点击UITextField 时弹出空白,但键盘不可见,我无法输入任何内容。

【问题讨论】:

很高兴看到附上截图... 你能显示视图的屏幕截图吗 检查帖子,更新截图 哇,从未见过类似的东西...... @jww 不是上述问题的重复,因为我在问题中写道一切正常,突然停止工作。今天早上,当我打开我的机器时,它工作正常。但是遇到了一个新问题,因为现在应用程序中的不同视图没有推送或弹出。所以与其浪费时间找出问题,我将代码回滚到昨天早上并保存了错误代码的副本。我会检查代码稍后解决问题。 【参考方案1】:

以下将修复键盘问题

模拟器 -> 硬件 -> 键盘 -> 切换软件键盘 应该可以解决这个问题。

【讨论】:

感谢您的帮助,重新启动 Mac 解决了问题...@aiden 呃。一定是无意中抓住了命令 shift k 并花了一个小时试图弄清楚为什么我的键盘没有出现!谢谢。 请注意,它仅在应该出现键盘的运行时刻起作用。【参考方案2】:

试试这个:

转到:

ios Simulator -> Hardware -> Keyboard 

然后取消选中

'Connect Hardware Keyboard'

或者干脆做:⇧ shift + ⌘ 命令 + K

继续编码...... :)

【讨论】:

我尝试了“切换软件键盘”,键盘出现在我面前。 这是什么魔法? :)【参考方案3】:

由于模拟器设置,Xcode 6/iOS 8 也可能发生这种情况:

Xcode 6: Keyboard does not show up in simulator

【讨论】:

【参考方案4】:

我有同样的问题,但只在 5s 模拟器上。而且,我试图去模拟器->重置内容和设置。这实际上解决了问题。

【讨论】:

我很高兴找到了这个建议,但我并不高兴我花了一夜的时间来解决这个问题。【参考方案5】:

还要确保你没有搞乱yourTextField.inputView

【讨论】:

【参考方案6】:

在这方面检查两件事

1-userInteractionEnabled=true

2-textFielfd.editable = YES;

希望这能解决您的问题。

【讨论】:

NO ,因为启用了用户交互并且弹出空白而不是键盘 第二个选项没有帮助【参考方案7】:

检查您是否在某个时候正在做类似的事情

[self.view endEditing:YES];
[self.myTextField resignFirstResponder];

或者您可能正在将第一响应者分配给其他控件。

希望对你有帮助

【讨论】:

【参考方案8】:

检查出口是否已映射并且委托是否设置为控制器?还要检查控制器是否设置了<UITextFieldDelegate>。 发送文件检查器的屏幕截图,也许?

【讨论】:

【参考方案9】:

我遇到了类似的问题,但在实际设备上。 我与苹果开发者技术支持 (Apple DTS) 进行了交谈,他们告诉我这是一个 swift 编译器或 Xcode 错误。 我做了一些解决方法。在苹果解决这个问题之前不要认为这是最好的解决方案,但现在它可以正常工作。

只需覆盖 UITextField 类:

class PBTextField : UITextField 

var keyboardShowDate = NSDate()

required init?(coder aDecoder: NSCoder)

    super.init(coder: aDecoder)

    self.initialisation()


override init(frame: CGRect)

    super.init(frame: frame)

    self.initialisation()


func initialisation()

    self.addTarget(self, action: "editingDidBegin:", forControlEvents: UIControlEvents.EditingDidBegin)
    self.addTarget(self, action: "editingDidEnd:", forControlEvents: UIControlEvents.EditingDidEnd)


// MARK: Delegates

func editingDidBegin(sender: AnyObject)

    self.becomeFirstResponder()
    self.keyboardShowDate = NSDate()


func editingDidEnd(sender: AnyObject)

    if(fabs(self.keyboardShowDate.timeIntervalSinceNow) <= 0.5)
    
        self.becomeFirstResponder()
        dispatch_after(0.1, block:  () -> Void in
            self.becomeFirstResponder()
        )
    



调度方法:

typealias dispatch_cancelable_block_t = ((cancel: Bool) -> Void)

func dispatch_async(block: dispatch_block_t, background: Bool = true) -> dispatch_cancelable_block_t?

return dispatch_after(0, block: block, background: background)


func dispatch_after(delay: NSTimeInterval = 0, block: dispatch_block_t, background: Bool = false) -> dispatch_cancelable_block_t?

var cancelableBlock : dispatch_cancelable_block_t?

let delayBlock : dispatch_cancelable_block_t =  (cancel) -> Void in
    if(cancel == false)
    
        if(background)
        
            block()
        
        else
        
            dispatch_async(dispatch_get_main_queue(), block)
        
    

    cancelableBlock = nil
;

cancelableBlock = delayBlock

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(delay * NSTimeInterval(NSEC_PER_SEC))), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
    if let cb = cancelableBlock
    
        cb(cancel: false)
    
)

return cancelableBlock


func cancel_block(block: dispatch_cancelable_block_t)

    block(cancel: true)

希望这对某人有所帮助。 如果您有更好的解决方案,请在 cmets 中告诉我。 谢谢 乔治

【讨论】:

【参考方案10】:

添加[textField canBecomeFirstresponder];

【讨论】:

以上是关于点击 UITextField 时没有出现 UIKeyboard的主要内容,如果未能解决你的问题,请参考以下文章

当我在 UITextField 中快速点击时,为啥 UIKeyboard 不出现?

在点击 UITextField 时,出现 DatePicker

UITextField 的键盘不会出现在 Swift 中的第一次点击时

UITextField 提示时键盘不显示

iOS:响应者辞职时,文本从子类 UITextfield 中消失

点击 UITextField 时既不显示键盘也不显示光标