【问题标题】:How do I present a JSQMessagesViewController with the keyboard already up?如何在键盘已经启动的情况下呈现 JSQMessagesViewController?
【发布时间】:2015-08-13 10:02:51
【问题描述】:

我正在为我正在构建的应用程序使用open source messaging UI library。当用户开始一个新的对话时,我希望“聊天视图”出现在键盘已经打开并且光标在文本字段上(类似于大多数现有的聊天应用程序)。有没有办法强制JSQMessagesViewController 在键盘已经打开的情况下出现?

我尝试使用:

self.keyboardController.textView.becomeFirstResponder()

但是,这会导致在显示视图时键盘立即弹出……但工具栏会滞后大约一秒钟(不算太多,但很明显)。此外,此解决方案似乎可以像往常一样使用向下手势禁用键盘。

我缺少什么可以解决这个问题吗?或者我是否必须修改库以获得这一点功能......如果是这样,我从哪里开始这样做?

【问题讨论】:

    标签: ios objective-c swift cocoa-touch jsqmessagesviewcontroller


    【解决方案1】:

    尝试这样做

    -(void)viewWillAppear:(BOOL)animated
    {
          [super viewWillAppear:YES];
          [myTextField becomeFirstResponder];
    }
    

    --> 将焦点放在 myTextField 上并自动打开键盘。希望对您有所帮助。

    【讨论】:

    • 感谢您的回答,但我刚刚尝试了这个,它遇到了与将 .becomeFirstResponder 放在 viewDidLoad 函数中完全相同的问题 - > textField 滞后并抑制键盘通过向下手势被解除。
    【解决方案2】:

    这对我有用。它很快,但应该很容易翻译。

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(false)
    
        self.inputToolbar!.contentView!.textView!.becomeFirstResponder()
    }
    

    【讨论】:

    • 这对您有用,因为在文本字段中不会落后于即将出现的键盘?因为对我来说,这与我的解决方案和 Er 的解决方案完全相同。下面是库卡迪亚。
    • 它导致一起弹出,而不是在键盘之后出现文本字段。仍然有短暂的延迟,但它们同时到达。
    【解决方案3】:

    我想通过单击按钮来实现这一点,所以我添加了:

    [self.inputToolbar.contentView.textView becomeFirstResponder];
    

    如果你想在加载时添加:

    - (void)viewDidAppear:(BOOL)animated {
        [super viewDidAppear:animated];
    
        [self.inputToolbar.contentView.textView becomeFirstResponder];
    }
    

    【讨论】:

      【解决方案4】:

      这可能为时已晚,但在我的情况下,我忘了打电话给super.viewDidAppear(animated),这导致文本视图落后于键盘。一旦我添加了那个调用,问题就消失了。

      【讨论】:

      • 这是我对这个问题的回答。然后我点击了“添加另一个答案”。
      猜你喜欢
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多