如何防止我的搜索字段成为我的popover中的初始第一响应者?

时间:2016-01-16 23:21:34

标签: macos cocoa first-responder nspopover

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

我试过了:

  • 为搜索字段选择“拒绝第一响应者”。这似乎解决了这个问题,但是当你点击搜索字段时,就不会发生成为第一响应者的动画。

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

    [self.view.window makeFirstResponder:nil];
    

    什么都不做。似乎搜索字段成为视图加载后的第一个响应者。

  • 这确实有效,有点像:

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

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

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

1 个答案:

答案 0 :(得分:1)

这应该有效(未经测试):

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