【发布时间】:2012-09-14 08:43:00
【问题描述】:
我有 3 个文本字段(用户名、密码、确认密码)。当表单加载时,我希望光标在表单首次显示时在文本字段用户名中开始。请给我一些建议。提前致谢。
【问题讨论】:
标签: objective-c cocoa textfield
我有 3 个文本字段(用户名、密码、确认密码)。当表单加载时,我希望光标在表单首次显示时在文本字段用户名中开始。请给我一些建议。提前致谢。
【问题讨论】:
标签: objective-c cocoa textfield
使用消息becomeFirstResponder,像这样:
[self.passwordField becomeFirstResponder]
【讨论】:
[usernameTextField becomeFirstResponder];
这应该会为您提供所需的结果。如果您想了解有关该机制的更多信息,可以阅读responder chain here。
编辑:
我的错,我以为你的意思是 UITextField (Cocoa Touch)。
使用 NSWindow makeFirstResponder: 方法,而不是这个方法,使 第一个响应者的对象。切勿直接调用此方法。
[window makeFirstResponder:usernameTextField];
【讨论】:
UITextField delegate吗?
在斯威夫特中
self.sampleUITextField.becomeFirstResponder()
【讨论】:
对于 macOS,使用 Swift 3,becomeFirstResponder() 调用必须在 viewWillAppear() 方法中。
class myViewController {
@IBOutlet weak var myTextField: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear {
myTextField.becomeFirstResponder()
}
...
}
【讨论】:
[yourTextfield becomeFirstResponder]
【讨论】:
在您的 loadView 或 viewDidLoad(仅在 10.10 中可用)在 super 调用之后添加以下内容
dispatch_async(dispatch_get_current_queue(), ^{
[self.usernameInputField becomeFirstResponder];
});
【讨论】:
如果您尝试在 NSPanel(或任何其他工作表)中实现此目的并且禁用标题+边框,则无法设置焦点(请参阅 http://www.cocoabuilder.com/archive/cocoa/207749-nstextfield-will-not-become-editable-in-borderless-window.html)
在这种情况下,尝试继承工作表窗口类并覆盖 canBecomeKeyWindow 以始终返回 YES。
【讨论】: