在Objective C中加载表单时,将光标焦点设置在TextField上

时间:2012-09-14 08:43:01

标签: objective-c cocoa textfield

我有3个文本字段(用户名,密码,确认密码)。当表单加载时,我希望光标在首次显示表单时在文本域用户名中开始。请给我一些建议。提前谢谢。

7 个答案:

答案 0 :(得分:28)

[usernameTextField becomeFirstResponder];

这应该为您提供所需的结果。如果您想了解有关该机制的更多信息,可以阅读responder chain here

编辑:

我的不好,我以为你的意思是UITextField(Cocoa Touch)。

  

使用NSWindow makeFirstResponder:方法,而不是此方法   第一响应者的对象。永远不要直接调用此方法。

[window makeFirstResponder:usernameTextField];

答案 1 :(得分:2)

使用消息becomeFirstResponder,如下所示:

[self.passwordField becomeFirstResponder]

答案 2 :(得分:2)

[yourTextfield becomeFirstResponder]

答案 3 :(得分:1)

loadViewviewDidLoad(仅适用于10.10)中,在super来电后添​​加以下内容

dispatch_async(dispatch_get_current_queue(), ^{
    [self.usernameInputField becomeFirstResponder];
});

答案 4 :(得分:0)

如果您尝试在NSPanel(或任何其他工作表)中实现此功能并禁用标题+边框,则无法设置焦点(请参阅http://www.cocoabuilder.com/archive/cocoa/207749-nstextfield-will-not-become-editable-in-borderless-window.html

在这种情况下,尝试子类化工作表窗口类并覆盖canBecomeKeyWindow以始终返回YES。

答案 5 :(得分:0)

在Swift中

self.sampleUITextField.becomeFirstResponder()

答案 6 :(得分:-1)

对于macOS,使用Swift 3,必须在viewWillAppear()方法中调用becomeFirstResponder()。

class myViewController {
  @IBOutlet weak var myTextField: NSTextField!

  override func viewDidLoad() {
    super.viewDidLoad()
  }

  override func viewWillAppear {
    myTextField.becomeFirstResponder()
  }
  ...
}