【问题标题】:How can I prevent my search field from becoming the initial first responder in my popover?如何防止我的搜索字段成为弹出窗口中的初始第一响应者?
【发布时间】:2016-01-16 23:21:34
【问题描述】:

我有一个弹出框,顶部有一个搜索字段。弹出窗口中没有其他任何东西可以成为第一响应者。当弹出框出现时,搜索字段总是以第一响应者的身份开始。我不希望这种情况发生。

我试过了:

  • 为搜索字段选择“拒绝第一响应者”。这似乎解决了问题,但是当您单击搜索字段时,没有发生成为第一响应者的动画。

  • 在我的视图控制器的viewDidLoad 中:

    [self.view.window makeFirstResponder:nil];
    

    什么都不做。看起来搜索字段在视图加载后成为第一响应者。

  • 这确实奏效了,有点:

    [self.view.window performSelector:@selector(makeFirstResponder:) 
                           withObject:nil afterDelay:0];
    

    但是当弹出框打开时,您可以看到搜索字段正在执行 resign-first-responder 动画。

如何防止搜索字段成为第一响应者?

【问题讨论】:

    标签: macos cocoa first-responder nspopover


    【解决方案1】:

    这应该可以工作(未经测试):

    • 使用mayBecomeFirstResponder 属性创建搜索字段的子类
    • 将搜索字段的类更改为该子类
    • 在那个子类中覆盖- (BOOL)acceptsFirstResponder { return self. mayBecomeFirstResponder; }
    • 向您的视图控制器添加一个搜索字段出口并连接它
    • 在视图控制器中覆盖- (void)viewWillAppear并将搜索mayBecomeFirstResponder设置为NO
    • 在视图控制器中覆盖- (void)viewDidAppear并将搜索mayBecomeFirstResponder设置为YES

    【讨论】:

    • 我认为可能更简单的方法:viewDidLoadself.view.window.initialFirstResponder = nil
    • 我对此进行了测试,它就像一个魅力。感谢您提供详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多