在Mac OS X中,您可以找到第一个响应者:
[[self window] firstResponder]
Run Code Online (Sandbox Code Playgroud)
在iOS中有什么办法吗?或者您是否需要枚举子控件isFirstResponder并向每个控件发送消息?
在XCode IDE中,MainStoryboard编辑器中视图控制器的底部有两个框:First Responder和Exit.
我知道firstResponder在代码中是以编程方式编写的,但在storyboard编辑器中,我似乎无法通过它做任何有用的事情.
我是否能够使用此区域中的第一个响应者以某种方式设置视图的第一个响应者?我希望第一个文本字段在加载时处于活动状态,我尝试右键单击并拖动无效.我知道我可以在viewDidLoad方法中以编程方式设置它,但有没有办法在这里做到这一点?
什么是绿色出口?

我试图在a的子视图中触发一个事件UITableViewCell,让它冒泡响应者链并由自定义UITableViewCell子类处理.
基本上:
SomeView.m(这是一个子视图UITableViewCell)
[self.button addTarget:nil action:@selector(someAction:) events:UIControlEventTouchUpInside]
Run Code Online (Sandbox Code Playgroud)
SomeCustomCell.m
- (void)someAction:(id)sender {
NSLog(@"cool, the event bubbled up to the cell");
}
Run Code Online (Sandbox Code Playgroud)
为了测试为什么这不起作用,我someAction:在ViewController上添加了方法,并且ViewController最终处理从表视图单元子视图冒泡的事件,即使Cell应该处理它.我已经检查过Cell是否在响应者链上,并且我已经验证了在单元格上方和下方的响应者链上的任何视图如果它们实现该someAction:方法将响应该事件.
到底发生了什么事?
这是一个显示它的项目https://github.com/keithnorm/ResponderChainTest这是预期的行为吗?我没有找到任何文档说明UITableViewCell的处理方式与其他UIResponder的处理方式不同.
我有一个包含在父滚动视图(不是直接子项)中的子滚动视图.我想要的是父滚动视图在子滚动视图到达其内容结尾时开始以相同的方向滚动.
这种工作开箱即用,但不是真的.现在,我必须抬起手指,使子滚动视图在孩子到达结束后开始滚动.
有什么想法吗?
编辑:
通过在表格视图单元格中向右滑动以显示聊天控制器,可以在Snapchat中看到我正在寻找的内容的示例.
我有一个子类NSOutlineView实现copy:,paste:,cut:等。另外,NSDocument子类实现这些相同的方法。
当大纲视图在响应者链中(是第一响应者或其父视图)时,所有复制/粘贴事件都NSOutlineView被子类拦截。我想要的是根据上下文捕获其中一些消息,或者让它们传播并NSDocument被子类捕获。
我想要的基本上是:
- (void)copy:(id)sender
{
// If copy paste is enabled
if ([self isCopyPasteEnabled]) {
[[NSPasteboard generalPasteboard] clearContents];
[[NSPasteboard generalPasteboard] writeObjects:self.selectedItems];
return;
}
// If copy paste is disabled
// ... forward copy: message to the next responder,
// up to the NSDocument or whatever
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多技巧,没有一个成功:
[[self nextResponder] copy:sender] 这不起作用,因为下一个响应者可能不会实施 copy:[super copy:sender] 在这里一样, super 没有实现 copy:[NSApp sendAction:anAction to:nil from:sender]向第一响应者发送一个动作是很好的。如果在动作中使用当然,我可以在响应者链上手动循环,直到找到响应copy: …
请原谅这个超级菜鸟的问题,但在过去的一个小时里我一直在谷歌上搜索这个问题,我很沮丧,因为我似乎找不到这样一个非常基本的问题的答案:
我如何处理 Cocoa 中的控制更改?
我来自 iOS,很明显 Cocoa 并不像 UIKit 那样使用出口或委托来处理事件,我觉得我在这里错过了一些非常重要的信息。我已经发现它使用了第一响应者链,但除此之外我无法弄清楚如何实际做到这一点,或者如何找到这些事件的定义或记录位置。
所以我有一个NSSegmentedControl内部 a NSToolBar,我只想知道用户何时更改所选段。我已经仔细阅读了类文档,但没有看到任何提及要处理的任何类型的事件或操作。我确实注意到,如果我将控件的action出口拖到我的第一响应者代理上,我会列出一千万种不同的操作,其中没有一个看起来是相关的。
我到底该如何在 Cocoa 中做到这一点?
ios ×4
cocoa ×3
objective-c ×2
uiresponder ×2
cocoa-touch ×1
nsresponder ×1
nstoolbar ×1
snapchat ×1
uikit ×1
uiscrollview ×1
uitableview ×1
xcode ×1