当前位置:  开发笔记 > IOS > 正文

强制Cocoa文本字段结束编辑

如何解决《强制Cocoa文本字段结束编辑》经验,为你挑选了3个好方法。

我有一个基于视图的gui,其中包含每个gui项目的文本字段.当我选择另一个菜单项时,我希望我的文本字段退出编辑模式.我无法在nsTextField文档中找到这样做.有任何想法吗?



1> Rob Keniger..:

您需要告诉窗口从控件中删除第一响应者状态:

[[textField window] makeFirstResponder:nil];

这将结束编辑并从文本字段中删除焦点.


不起作用(至少在优胜美地).

2> Stanislav Pa..:

来自cocoabuilder.com的以下解决方案- 使用NSTextField停止编辑会话在OS X 10.9和OS X 10.10 for Objective-C以及10.10 for Swift上都适用于我.

这是Objective-C版本:

@implementation CustomTextField

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];

    self.target = self;
    self.action = @selector(action:);

    return self;
}

- (void)action:(NSTextField *)textField {
    // Make something else first responder, something neutral 
    // (or can be a fake invisible element)
    [self.window makeFirstResponder:self.window.contentView];

    // Other code
}

@end

背景:本主题中接受的解决方案在OS X 10.9和10.10上从未对我有用[[textField window] makeFirstResponder:nil];,因此不需要调用它的建议 - 我需要调用makeFirstResponder一些非nil NSResponder子类(这可以是NSWindow的内容视图或NSViewController的视图,它们都可以工作在我的情况下或一些假的NSTextField视图,对于更复杂的情况,用户不可见).

重要细节:-[NSWindow makeFirstResponder]必须在NSTextField的动作选择器中完全调用,如我的示例所示.NSTextField方法管道中没有其他地方为我工作(textDidEndEditing:,textShouldEndEditing:或control:textShouldEndEditing :)



3> joe..:

我知道这是一个老问题,但万一有人对swift 3感到疑惑,它只适用于我

DispatchQueue.main.async {
    self.window?.makeFirstResponder()
}

Swift 4.2 udpate, nil使窗口成为第一响应者.否则抛出错误.

DispatchQueue.main.async {
    self.window?.makeFirstResponder(nil)
}

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有