如何在点击按钮时从文本字段中删除光标?

时间:2010-05-31 06:57:16

标签: objective-c cocoa nstextfield

我正在尝试做一个简单的任务:

我在一个窗口上有一个可编辑的文本字段,两个按钮(标题:make editable / make un-editable)。想法是:当用户点击“make editable”按钮时,文本字段应该可以编辑,当他/她点击“make not-editable”时,它应该变得不可编辑。

在“制作不可编辑”的行动中,我这样做:

[myTextField setSelectable:NO];
[myTextField setEditable:NO];

并且在“make editable”的行动中我这样做:

[myTextField setSelectable:YES];
[myTextField setEditable:YES];

问题是:

当myTextField中没有光标或者它有光标但用户没有在其中输入任何内容并点击 - “make un-editable”时它工作正常,然后myTextField变得不可编辑但是当它有光标和用户点击时在其中输入内容之后“制作不可编辑的”他/她仍然可以编辑myTextField。

对于它的解决方案,我尝试在用户点击“make not-editable”按钮后立即从myTextField中删除光标,方法是在可选择和可编辑的语句之前添加这些行:

  1. [someOtherTextField selectText:self];

  2. [[NSRunLoop currentRunLoop] performSelector:@selector(selectText:) someOtherTextField argument:self order:9999 modes:[NSArray arrayWithObject:NSDefaultRunLoopMode]];

  3. [someOtherTextField becomeFirstResponder];

  4. 但没有一个对我有用:(

    有人可以建议一些解决方案吗?

2 个答案:

答案 0 :(得分:4)

becomeFirstResponder的文档说

  

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

我不确定隐藏的文本字段是否可以成为第一响应者,因此请尝试:

[[myTextField window] makeFirstResponder: nil]

答案 1 :(得分:0)

迅速5

使用下面的代码

 password.window?.makeFirstResponder(nil)