我有一个我正在开发的多视图iPhone应用程序,它将在不同的屏幕上有很多输入,而不是必须用一些只发送resignFirstResponder消息的方法重复我自己,我想我会做一个静态的我的根控制器类中的方法,并用单个函数解决我所有的resignFirstReponder需求。那可能吗?我似乎无法将根控制器.h文件拖到Interface构建器中,如果我尝试将该类放在那里,我就无法将任何事件挂钩到它。有没有办法将事件挂钩到静态的IBAction方法?
修改
我应该更加清楚我要完成的事情。基本上,我在文本字段的“Do End On Exit”事件中调用resignFirstResponder来摆脱键盘。 (这是否是正确的方法?我是一个iPhone新手)因为我将在不同的视图上使用它,我不想为每个视图编写相同的功能。我希望在我的根控制器中有一个+(void) resignSomeKeyboardsOrSomething
类型的函数,我可以将每个视图中的“Do End On Exit”事件挂钩。有没有办法做到这一点?对于第一次模糊不清抱歉。
答案 0 :(得分:1)
让我看看我是否明白这一点,你有一个应用程序有多个屏幕,可以做各种各样的事情,你想要这些东西触发一个功能,对吗?
听起来,通知对您来说效果很好。
因此,假设您在根视图控制器中定义了一个函数resignMyResponder。只需在初始化函数中将以下内容添加到根视图控制器文件中:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(resignMyResponder:)
name:@"resignThis"
object:nil];
然后,在你的其他屏幕/文件中,每当你想要调用resignMyResponder时,只需执行:
[[NSNotificationCenter defaultCenter]
postNotificationName:@"resignThis" object:nil];
resignMyResponder可能需要非常复杂才能处理可能被调用的所有不同情况,但这取决于应用程序的实现。
答案 1 :(得分:0)
UIResponder
并不像NSResponder那样明确。
<强> resignFirstResponder 强>
通知 它被要求的接收器 放弃其第一个地位 响应者在它的窗口。
- (BOOL)resignFirstResponder
<强>讨论强>
默认实现 返回YES,辞职第一响应者 状态。子类可以覆盖它 更新状态或执行某些操作的方法 行动,如不突出 选择,或返回NO,拒绝 放弃第一响应者的地位。
如果我们将一个类的实例方法分为两类(对不起,已经很晚了,也许这样过于简单化了......):
1)旨在直接从其他对象调用以检索某些数据或执行操作的方法。 [view setNeedsDisplay:YES];
2)旨在被(具体)子类覆盖的方法。你通常不会在代码中自己调用这些方法;相反,它们是由Cocoa代表您调用的,意图是覆盖它们以执行自定义实现。 Cocoa为你打电话- (void)drawRect:(NSRect)frame;
。在UIResponder
和NSResponder
等抽象类中尤其如此。
- (BOOL)resignFirstResponder
属于后者:这种方法基本上是Cocoa,问你“你想辞职第一响应者吗?”。你回答是或否。它会根据需要自动调用。您无需直接调用它。
NSResponder
文档更加清晰:
<强> resignFirstResponder 强>
通知 接收器,它被要求 放弃其第一个地位 响应者在它的窗口。
- (BOOL)resignFirstResponder
<强>讨论强>
默认实现 返回YES,辞职第一响应者 状态。子类可以覆盖它 更新状态或执行某些操作的方法 行动,如不突出 选择,或返回NO,拒绝 放弃第一响应者的地位。
使用NSWindow
makeFirstResponder:
方法,而不是这种方法,来制作一个 反对第一响应者。决不 直接调用此方法。
不确定是否有相当于makeFirstResponder:
的iPhone,但这就是您应该努力的目标(您积极使新视图成为第一响应者)。