问题标签 [first-responder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
6717 浏览

iphone - 在模态视图控制器中调用 becomeFirstResponder 时的键盘动画问题

我一直在调用-becomeFirstResponder一个UITextField包含在模态显示的视图控制器中的一些问题。我在模态视图控制器的方法中调用此方法,-viewDidLoad以便立即显示键盘。我期望键盘和模态视图控制器同时从屏幕底部开始动画。但是,我观察到的是以下内容:

  1. 在单击调用-presentModalViewController:animated:父视图控制器上的方法的按钮和子视图控制器开始以模态方式设置动画之间存在约 0.2 秒的 UI 延迟。
  2. 一旦模态视图控制器的动画开始,键盘立即呈现绝对没有动画。
  3. 一旦模态视图控制器的动画完成,其他一切似乎都运行顺利。
  4. 关闭模态视图控制器会导致它在屏幕外平滑动画(巧合地与键盘一起)。
  5. 在第一次之后的任何时间单击呈现模态视图控制器的按钮都会导致相同的模式,除了没有 ~0.2 秒的 UI 延迟。

就好像键盘的动画和模态视图控制器的动画都在同时竞争一些较低级别的核心动画资源,但我不明白为什么会发生这种情况。似乎进一步证实了这种预感的是,如果我不要求UITextField成为第一响应者(即,如果我不要求键盘呈现自己),那么绝对没有 UI 滞后,并且模态视图控制器动画即刻。

有趣的是,如果我做类似的事情[self.textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0001];,那么键盘的动画几乎与模态视图控制器的动画同时发生——当在 iPhone 上运行时,很难说它们不是同时被动画模拟器。然而,当在实际设备上运行时,很容易注意到键盘直到模态视图控制器出现后才会出现。但重要的是,不再有 UI 滞后。

有没有人经历过类似的事情?

0 投票
2 回答
8628 浏览

iphone - iPhone 急救人员

我对 iPhone 响应者链感到困惑。具体来说,在 iPhone 事件处理指南http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/EventHandling/EventHandling.html中,我们有以下内容:

第一个响应者是应用程序中的响应者对象(通常是 UIView 对象),它被指定为除触摸事件之外的事件的第一个接收者。

但是 UIView 是 UIResponder 的子类。UIResponder 类参考是这样说的:

返回值

如果接收者可以成为第一响应者,则为 YES,否则为 NO。讨论

默认返回 NO。如果响应者对象从此方法返回 YES,则它成为第一响应者并可以接收触摸事件和动作消息。子类必须重写此方法才能成为第一响应者。

我对明显的矛盾感到困惑。谁能帮我清理一下?

值得一提的是,我确实设置了一个简单的基于视图的应用程序,并在其视图上调用 canBecomeFirstResponder 和 isFirstResponder。两者都返回NO。

0 投票
2 回答
1961 浏览

iphone - 不能从 textFieldDidBeginEditing 调用 resignFirstResponder 吗?(苹果手机)

当我这样做时-(BOOL)textFieldShouldReturn:(UITextField *)textField,它会起作用。但是当我在里面使用相同的代码时-(void)textFieldDidBeginEditing:(UITextField *)textField,它不起作用。

我确定它正在调用textFieldDidBeginEditing。我有一个NSLog内部方法,它正在被调用。

0 投票
1 回答
864 浏览

iphone - 带有两个图像的 UIScrollview - 保持 1 个图像可缩放和 1 个图像静态(固定大小)

我有一个UIView包含一个可缩放UIImageView和另一个半透明UIView的。

我想要实现的是能够UIImageView在保持半透明视图静态而不是缩放的同时进行缩放。

如果我在(添加到)UIView顶部添加半透明,一切都会缩放。但是,如果我将两者都作为子视图添加到 base ,则仅跟踪触摸是半透明的,因为它是最后一个添加的。UIImageViewUIScrollViewUIViewUIView

我确实需要控制首先驻留在半透明UIView的触摸,因为我可能想调整半透明视图的大小。UIScrollView但是,如果使用两根手指,我想将触摸控制传递给。无论如何我可以做到这一点吗?下一个响应者似乎不起作用。除了子类化之外,我还尝试使用 hittest UIWindow,但是基础UIView需要推送/弹出导航控制能力,所以我认为我不能子类UIWindow化以推送到导航堆栈上。

任何帮助,将不胜感激。

谢谢,

温斯顿

0 投票
2 回答
535 浏览

keyboard - 按下 UIButton 后,UITextfield 变得专注

我有一个用于输入文本的 UITextfield。一个按钮触发一个功能。完成 IBAction 后,UITextfield 再次获得焦点。在 IBAction 之后,我想让键盘消失。现在发生的事情是,由于按钮的 IBAction,键盘消失了(我正在显示 UIAlert),并且在 IBAction 之后,键盘与 UITextfield 中的焦点一起再次弹出。是否可以防止在 IBAction 之后聚焦 UITextfield?

0 投票
2 回答
1658 浏览

cocoa - 为什么我的 NSWindow 第一次只接收 mouseOver 事件?

我有一个应用程序,其中使用 orderOut 和 orderFront 显示和隐藏无边框窗口。当它可见时,我希望它在鼠标移到它上面时成为关键窗口。到目前为止,我已经这样做了:

  • 在 awakeFromNib 中,我已将其第一响应者设置为自身。
  • 在窗口的构造函数中,我将接受鼠标事件设置为 YES。
  • 在 mouseMoved 方法中,我使用 makeKeyAndOrderToFront。

我的问题是,这只适用于我第一次将鼠标移到窗口上。之后,它不会收到任何 mouseOver 事件。我试过检查 firstResponder 但据我所知,它永远不会从窗口改变。

有什么想法可以让这个工作吗?

0 投票
2 回答
651 浏览

iphone - UIButton not disabled when UITextField has focus

I have a UIButton - a submit button - that I set the enabled and disabled states and titles for. I use the submit button title to show status like @"Sending..." while my program is making an api call by disabling the button.

It works fine until the edge case where someone enters a comment on a UITextField, but instead of dismissing the keyboard/finishing editing just hits the SUbmit button (so the keyboard is still up). In this case, disabling the button doesn't change the title and background to the disabled state.

Is this an issue with firstResponder? I'm trying to explicity tell the comment field to resignFirstResponder before setting the button.enabled = NO, but it still doesn't update the button.

0 投票
1 回答
1513 浏览

iphone - 当在菜单以外的地方单击屏幕时,UIMenuController 消失

我正在使用 UIMenuController 并在单击屏幕时消失。当我显示菜单时,我需要等待用户在菜单消失之前选择一个项目,但是如果单击屏幕上的任意位置(而不是菜单栏上),菜单仍然会消失。有什么办法可以防止这种情况发生吗?

它可能与 UIResponder 类有关吗?我一直在阅读此内容,但我不确定我是否完全理解响应者的概念。

谢谢。

0 投票
2 回答
6914 浏览

iphone - 使用 UIScrollView 和 UITextFields 作为子视图的不需要的自动滚动

“太长;未读”版本:有没有办法禁用UIScrollView告诉 a 时UITextField的自动滚动行为becomeFirstResponder

我有一个启用分页的滚动视图和几个视图作为子视图,每个子视图都由它自己的视图控制器控制。每个子视图都有一个 UITextField。

要求是当页面滚动到视图中时,它的文本字段应该成为第一响应者。

这在使用手指滑动滚动时很好——我使用滚动视图委托方法scrollViewDidEndDecelerating:来知道滚动停止并且页面在视图中时,我可以告诉文本字段成为第一响应者。

但是,当滚动视图是“自动滚动”时,就像在告诉滚动视图时一样scrollRectToVisible:animated:,不会调用用于减速的滚动视图委托方法。当在没有用户交互的情况下将新创建的页面滚动到视图中时,或者当用户点击UIPageControl.

我的解决方案是在告诉它滚动到视图之前简单地设置文本字段的第一响应者状态 - 但似乎告诉滚动视图中的文本字段成为第一响应者会导致滚动视图自动将其滚动到视图中.

我假设这是将文本字段放入表格视图单元格时使用的行为(因为表格视图是滚动视图子类)。如果您设置了一个小型测试应用程序,具有表格视图和表格单元格内的文本字段,如果键盘在成为第一响应者时会遮挡表格视图单元格,则表格视图将自动滚动以使其可见。

但是,我不明白为什么在我的示例中会出现这种行为,我没有使用表格视图 - 只是一个普通的滚动视图。

我还应该提到我的滚动视图禁用了垂直滚动,并且只水平滚动。

我已经在另一个测试应用程序中进行了测试,该应用程序将文本字段作为滚动视图的直接子视图(没有视图控制器或容器视图)并且发生了同样的情况。如果您告诉屏幕外的文本字段成为第一响应者,滚动视图会自动为您滚动。

这通常不是问题,但它似乎搞砸了滚动视图的分页。当我用手指滚动时,每个视图都会反弹并正确居中。但是,当我滚动一个矩形以使动画可见并告诉一个文本字段成为第一响应者时,滚动视图似乎与自身发生冲突,并且视图只是滚动到视图的一部分,而不是居中。

然后,如果我用手指触摸视图(不滑动,甚至不移动),滚动视图会跳回第一页。

我目前针对所有这些愚蠢的自动滚动行为的解决方法是使用 anNSTimer来确定何时更新第一响应者。

我使用手动滚动代码scrollRectToVisible:animated,然后在 0.3 秒后调用我的方法将文本字段更新为第一响应者。(0.3 秒是反复试验,试图看看哪个似乎是允许动画的最短时间,但仍然足够长,不会导致与滚动视图发生冲突。

如您所见,这并不优雅,并且可能会中断。

有什么方法可以禁用UIScrollView告诉 a 时UITextField的自动滚动行为becomeFirstResponder吗?

0 投票
2 回答
1391 浏览

iphone - 带有第一响应者的键盘顶部的工具栏

这是一个非常常见的话题,并且有很多答案。

情况:我有一个全屏(减去工具栏)UITextView,底部有一个 UIToolbar。当 UITextView 获得第一响应者时,我想让工具栏与键盘一起向上滑动并添加一个“完成”按钮,该按钮将关闭键盘。

到目前为止:基于这个例子,我已经完全工作了。除了当我放入工具栏时工具栏没有动画的[textView becomeFirstResponder];事实viewDidLoad。即使keyboardWillShow被称为。有人有什么主意吗?

代码:这样您就不必查看示例代码,这就是正在发生的事情:

在 viewDidLoad 中:

在键盘将显示: