- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个问题,每次当我进入一个 View Controller 时——也就是下面截图中的“MessageListViewController”,键盘会自动弹出。
问题是我在这个 MessageListViewController 中使用了一个 UITextView 来进行文本输入,当我从 navigationController 堆栈中弹出这个 View Controller 时,如果我让键盘保持打开状态,那么下次再次按下时,这个键盘就会弹出自动退出。
如果我在弹出这个 View Controller 之前让 TextView resignFirstResponder,那么下次进入它就可以了。然而,手动 resignFirstResponder 将使键盘关闭并出现丑陋的动画(手动关闭键盘会使键盘始终垂直向下移动,但是 View Controller 弹出事务是水平的,因此看起来很连线)
我试图构建一个简单的示例来测试键盘关闭行为 - 有两个 View Controller ,一个是 navigationController 的 rootViewController,它会将另一个插入 viewController 堆栈,因此插入的 View Controller 包含一个 UITextView,如果我突出显示推送的 TextView ,然后返回到 Root View Controller ,动画效果很好,键盘也不会自动弹出。所以我只是不知道为什么在我的项目中,如果我只是离开页面而没有手动关闭键盘,这个键盘总是意外出现。
顺便说一句,以下调用堆栈发生在 viewWillAppear 和 viewDidAppear 之间。看起来像是被 iOS 触发来恢复 UITextView 的最后状态。
- (UIView*)findFirstResponder {
if (self.isFirstResponder) {
return self;
}
for (UIView* subview in self.subviews) {
UIView* ret = [subview findFirstResponder];
if (ret) {
return ret;
}
}
return nil;
}
NSLog(@"%@", [[[UIApplication sharedApplication] keyWindow] findFirstResponder]);
当这个由键盘触发的调用堆栈将显示通知时,我还尝试使用键窗口的第一响应者进行跟踪,并且输出只是“nil”。
最佳答案
感谢大家的帮助,我才意识到问题出在哪里,实际上我没有声明我在这里使用的 messagelistViewController 实际上是一个单例,所以即使我将它从 viewController 堆栈中弹出,它也不会释放。
在这种情况下,当下一次这个 View Controller 再次出现时,UIKit 将足够聪明地恢复以前的 View 状态,如果它没有被释放的话。
在我的测试示例中,当测试 View Controller 从堆栈中弹出时,我没有保留它。所以这就是为什么这适用于我的测试样本。
然后我的最终解决方案有点简单,当 View 确实消失时,只需从它的 super View 中删除 TextView ,然后在 View 出现时重新添加它。
事实证明我的问题有点愚蠢,但它确实让我知道了两件事:
1) 如果你不删除 View Controller ,它每次出现都会恢复到之前的状态
2) 如果手动退出第一响应者的输入,键盘关闭动画将始终关闭,如果我们不想要这种效果,我们永远不会手动关闭它。
关于ios - 为什么按下 viewController 时键盘自动弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23075747/
我现在在另一个 ViewController 之上展示了一个几乎透明的 ViewController,但它禁用了与下面的 ViewController 的交互。这是我目前使用的代码: topContr
我有一个 View Controller ,其工具栏上有 3 个 UIButtons,可以打开一个新的 View Controller 作为弹出窗口。我在 Storyboard 中创建了 Segues
这个问题在这里已经有了答案: Delegates in swift? (15 个答案) 关闭 3 年前。 在我的场景中,我试图在关闭 View Controller 期间将值从 ViewContro
假设我有两个 viewController,AViewController 和 BViewController。 AViewController 嵌入在 NavigationController 中(
我有 3 个 View Controller A、B 和 C。 我在 vcA 上,我使用 推送 vcB [self.navigationController pushViewController:vc
我想知道如何在 VC3 和 VC1 之间传递数据。 我拥有的是 Root View (VC1)。然后你输入一个tableView,如果你选择一个项目,你将进入tableView2(VC3) - 类别
我在使用 Unwind Segue 时遇到问题。我有 3 个 ViewController,它们都在名为 ViewController.swift 的类下。我试图获取最后一个 ViewControll
我有一个应用程序,其左上角有一个汉堡菜单。按下时,菜单会以 90% 的不透明度淡入当前 ViewController,显示应用程序的主要导航选项。 我使用下面的代码从页面呈现 viewControll
我的问题是,当我呈现一个 UIViewController 时,呈现的 View 变黑了。 我有一个名为 mainViewController 的 UIViewController,它是我窗口的 Ro
例如,当我呈现UIActivityViewController或UIAlertController时,我仍然可以看到背景viewController,我不想在viewContollerA中嵌入view
我从second viewController进入了third viewController,但是我不想回到第二个viewController,我需要直接回到我的第一个viewController,我
我的应用程序是标签栏(+ 导航)应用程序。在 FirstViewController 中,我调用 onModalView。 -(void) onFilter { FilterViewControl
Photo Sharing 部分是我写的一个ViewController,当我按下正确的项目时,PhotoSharingViewController 会动画出现。 这是我的代码: PhotoShari
我正在尝试在另一个 View Controller 中使用 subview Controller 的应用程序。我有一个 VC,我正在实例化另一个 VC,并在外部 VC 内使用它自己的 xib。 我使用
我正在寻找有关包含 ViewController 的滚动的想法。我需要知道包含 View Controller 的位置。我已经尝试过 UIPageViewController 但我无法让滚动委托(de
我有一个带有嵌入式 NavigationController 的基本 ViewController 来提供工具栏。 ToolBar 有三个按钮,用于通过 segue 调用 ViewController
我的应用程序中的伙计们,我在应用程序委托(delegate)方法中有一些代码 application:didFinishLaunchingWithOptions:确定初始 View Controlle
我遇到了一个问题,我将对此进行描述,并且发现了一些类似的问题,但我认为与我的问题无关。 我有一个 UITabBarController,其中有 2 个用于 VC1 和 VC2 的选项卡。 VC1 转到
我的应用程序中有一个计时器。如果计时器达到 0,则用户将被带到失败页面。当这种情况发生时,之前的 ViewController 没有被关闭,导致更多的内存被占用。 如果出现失败页面,我希望关闭之前的
在问这个问题之前,我当然做了一些调查。我在 google 和 stackoverflow 上找到的链接或主题之一是: How do I load another view controller fro
我是一名优秀的程序员,十分优秀!