2016-01-16 7 views
1

У меня есть popover с полем поиска вверху. Больше ничего нет в popover, который мог бы быть первым ответчиком. Когда появляется popover, поле поиска всегда заканчивается как первый ответчик. Я не хочу, чтобы это произошло.Как я могу помешать моему поисковому полю стать первым первым ответчиком в моем popover?

Я пробовал:

  • Выбор "Отказывается Первый ответчик" в поле поиска. Это, похоже, решает проблему, но когда вы нажимаете на поле поиска, анимация становления первого ответа не происходит.

  • В viewDidLoad моего зрения контроллера:

    [self.view.window makeFirstResponder:nil]; 
    

    ли ничего не делать. Кажется, что поле поиска становится первым ответчиком после загрузки вида.

  • Это сделал работу, вроде:

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

    Но вы можете видеть поле поиска делает уволиться-первых, ответчик анимации при открытии поповер.

Что можно сделать, чтобы поле поиска не стало первым ответчиком?

ответ

1

Это должно работать (непроверенные):

  • Создать подкласс поле поиска с mayBecomeFirstResponder собственности
  • Изменить класс вашего поиска поле этого подкласса
  • В этом подклассе перезаписать - (BOOL)acceptsFirstResponder { return self. mayBecomeFirstResponder; }
  • Добавить поле поиска в поле зрения к контроллеру вашего вида и подключить его
  • В контроллере просмотра перезапись - (void)viewWillAppear и установка искателя ч mayBecomeFirstResponder к NO
  • В контроллере представления перезаписать - (void)viewDidAppear и установить поиск mayBecomeFirstResponder в YES
+0

более простой способ, что я думаю, может работать: В '' viewDidLoad', self.view.window.initialFirstResponder = nil'. – tbodt

+0

Я тестировал это, и он работает как шарм. Спасибо за подробную информацию. – coolcool1994