菜鸟教程小白 发表于 2022-12-13 03:40:22

ios - viewDidDisappear 后键盘不消失


                                            <p><p>iOS 11.2、Xcode 9.2</p>

<p>我已经尝试了所有方法来关闭旧 <code>UIViewController</code> 的 <code>viewDidDisappear</code> 上的键盘 <strong>AFTER</strong> 新 <code>UIViewController</code> 被插入 <code>UINavigationController</code> 堆栈。但没有运气。</p>

<p>如果我在 <code>viewWillDisappear</code> 上关闭它 - 它将被关闭,但带有动画 <strong>DURING</strong> 推送动画。这不是期望的行为。我希望仅当 Controller 不再可见时才关闭旧 <code>UIViewController</code> 的键盘。</p>

<p>行为应该类似于 Telegram 应用中的行为:</p>

<p>在任何带有可见键盘的对话框中按下对手头像,您将被推送到对手的帐户信息。然后,如果您按下后退按钮,您将被重定向回一个对话框。但是键盘已经关闭了。</p>

<p>感谢任何帮助!</p>

<p>附:该问题可能看起来像是重复的,但我未能使其与我找到的解决方案一起使用。</p>

<p><strong>编辑 1.</strong></p>

<p>我创建了一个小的 <a href="https://bitbucket.org/iwheelbuy/keyboard" rel="noreferrer noopener nofollow"><strong>TEST PROJECT</strong></a>这表示未能实现所需的行为。</p>

<p>为了重现不良行为:</p>

<ul>
<li>启动应用。</li>
<li>点击 <code>UITextField</code> 或 <code>UITextView</code> 并等待键盘出现。</li>
<li>点击“下一步”按钮并等待新 Controller 被按下。</li>
<li>点击“返回”按钮并等待弹出新 Controller 。</li>
</ul>

<p>因此 - 初始 ViewController 将在推送/弹出操作后拥有事件键盘。我需要在按下/弹出操作后隐藏键盘。此外,在初始 ViewController 不可见之前不应关闭键盘,应在 <code>viewDidDisappear</code> 操作后关闭键盘。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在某些情况下,<strong>没有文本字段是第一响应者</strong>,但键盘在屏幕上。在这些情况下,上述方法无法关闭键盘。</p>

<p>使用 <code>textView</code> 的属性:<code>isEditable</code>。这是一个经过测试的代码:</p>

<pre><code>override func viewWillAppear(_ animated: Bool) {
    self.viewTextView.isEditable = false
    super.viewWillAppear(animated)
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    self.viewTextView.isEditable = true
}
</code></pre>

<p><strong>结果</strong>:</p>

<p> <a href="/image/C3TV4.gif" rel="noreferrer noopener nofollow"><img src="/image/C3TV4.gif" alt="enter image description here"/></a> </p>

<p>来自<strong>@iWheelBuy</strong>的评论:</p>

<blockquote>
<p>Sometimes, text views will have <code>inputAccessoryView</code>. The way you do it
will make the keyboard disappear, but the <code>inputAccessoryView</code> will
remain... That is why you should also make <code>inputAccessoryView = nil</code>
or <code>inputAccessoryView = UIView()</code> when setting <code>isEditable = false</code></p>
</blockquote></p>
                                   
                                                <p style="font-size: 20px;">关于ios - viewDidDisappear 后键盘不消失,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/47847923/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/47847923/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - viewDidDisappear 后键盘不消失