Man*_* Wa 3 iphone objective-c uiviewcontroller becomefirstresponder ios
是否可以将becomeFirstResponder自身重定向到子视图?
这是我的场景。
我创建了一个新的对象UIWindow,我们称之为secWin对象UINavigationController,其中包含一个对象,我们称之为navCon对象rootViewController。
navCon有一个自定义的UIViewController,让我们称之为cusViewCon,因为rootViewController它只包含一个UITextField.
现在,当我按下主窗口中的按钮时,我会调用[secWin makeKeyAndVisible],它会成功显示新窗口。
但现在我希望在任何时候接到电话时UITextField显示键盘,例如,iOS 在呼叫时默认完成此操作。
我尝试通过简单地在我的类中覆盖来完成这一切,如下所示:cusViewConbecomeFirstResponder[secWin makeKeyAndVisible]
becomeFirstRespondercusViewCon
- (BOOL)becomeFirstResponder {
[_myTextField becomeFirstResponder];
return NO;
}
Run Code Online (Sandbox Code Playgroud)
它正在工作,但我不知道这是否是正确的方法,因为在文档中它说:
您可以在自定义响应程序中重写此方法,以更新对象的状态或执行某些操作,例如突出显示所选内容。如果重写此方法,则必须在实现中的某个时刻调用 super。
当您为 macOS 编写一些代码时,这种方法实际上更有意义,因为几乎任何视图都可能成为第一响应者。所以不用太担心文档。
你的程序走在正确的轨道上,但我会做类似的事情:
- (BOOL)becomeFirstResponder {
BOOL willBecomeFirstResponder = [super becomeFirstResponder];
if(willBecomeFirstResponder) {
return YES; // This element is taking over the first responder so do nothing
}
else {
[_myTextField becomeFirstResponder]; // This element may not become first responder at the moment so forward message to text field
return NO;
}
}
Run Code Online (Sandbox Code Playgroud)
这样我们就可以确保超类方法的执行仍然发生。在您的情况下它应该返回 false (如果没有,那么还要查看canBecomeFirstResponder方法),因此文本字段应该接收消息。如果它确实按照设计成为第一响应者,那么最好不要在文本字段上调用它。
| 归档时间: |
|
| 查看次数: |
1897 次 |
| 最近记录: |