我正在一个需要特殊文本字段来编辑字节值的项目中。我当前的解决方案是专用的只读文本字段和一个“ ...”按钮,用于打开弹出窗口,如下图所示:



现在,我尝试使解决方案更加用户友好。我的目标是:


如果文本字段获得第一响应者状态,则弹出窗口将自动打开。
全文被选中。
如果用户将文本字段留在选项卡上,或选择弹出框之外的任何字段,则弹出框应自动关闭。
如果用户键入任何有效数字并加后缀,则字节值将更新(例如“ 10 GB”)


目前我有点笨。我的问题是:


当文本字段获得第一响应者时,在子类中检测到的最佳位置在哪里?
我如何检测该字段何时辞去第一响应者的职责?
还有其他更简单的解决方案吗?

最佳答案

我可以使用- (BOOL)becomeFirstResponder作为钩子来实现一切,以显示弹出窗口并观察第一个响应者以自动隐藏弹出窗口:

- (void)viewDidMoveToWindow
{
    [super viewDidMoveToWindow];
    [self.window addObserver:self forKeyPath:NSStringFromSelector(@selector(firstResponder)) options:0 context:NULL];
}


首先,我在GitHub(MIT许可证)上发布了一个带有类的工作项目:

Project on GitHub

09-04 17:38