[英]Where does my First Responder Chain start?
我是他设计应用程序的最后一步。 它基本上由两个表视图以及其他视图组成。 每个TableView都有自己的TableViewController类实例。 我想做的是当用户单击表视图行之一时激活相应的菜单项。 例如,我要删除用户当前正在选择的文件,因此激活了文件菜单保存。 但是,如果他不在表格视图中,我想在菜单中将其显示为灰色。
因此,我要使用“第一响应者”。 我添加了菜单项,定义了一个动作删除:在“第一响应者”中,并将菜单项链接到该动作。 TableViewController是NSViewController的子类。 在TableViewController.m中,我编写了init方法(用于将视图控制器插入响应者的链中):
[self setView:_tableView];
[self setNextResponder:self.view];
[self.view.subviews enumerateObjectsUsingBlock:^(NSView *subview, NSUInteger idx, BOOL *stop) { [subview setNextResponder:self]; }];
但是我的方法删除:不会被调用! 当用户单击表格视图时,它成为“第一响应者”吗? 然后,ViewController应该会收到该动作。 否则,什么是第一响应者以及如何设置它? 我想我缺少了什么!
firstResponder是响应选择器的第一个视图,窗口或应用程序本身
基本上
id firstResponder = keyView;
while(![firstResponder respondsToSelector:yourSelector] && firstResponder != nil) {
firstResponder = firstResponder.superview;
}
if(!firstResponder && [keyView.window respondsToSelector:sel]) {
firstResponder = window;
}
if(!firstResponder && [application respondsToSelector:sel]) {
firstResponder = application;
}
ViewController不在响应者链中,从不获取选择器
将VC添加到响应者链
id resp = myTableView.nextResponder;
myViewController.nextResponder = resp;
tableView.nextResponder = myViewController;
我找到了解决此问题的方法。 当我在“第一响应者”中定义动作时,我只是忘记在其动作中添加分号。
因此,我输入“ delete”而不是“ delete:”,正是由于这个原因,未调用我的方法-(void)delete:(id)sender!
还是要谢谢你的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.