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

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

【问题讨论】:

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

标签: ios xcode swift uitextfield


【解决方案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];

            【讨论】:

              猜你喜欢
              • 2019-02-14
              • 1970-01-01
              • 2021-08-06
              • 1970-01-01
              • 2018-01-15
              • 1970-01-01
              • 2013-09-23
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多