переуступить клавиатуру при потере фокуса на панели пользователя - PullRequest
7 голосов
/ 20 сентября 2011

Я делаю опцию UISearchBar на панели навигации моего приложения. Мое приложение состоит из нескольких просмотров и подпредставлений. У меня есть это основное мнение, которое имеет 3 других взгляда на себя. одна из них пуста (на данный момент), остальные 2 имеют табличные представления на них.

Я хочу, чтобы моя клавиатура отображалась при поиске и скрывалась, когда я выполняю фактический поиск или когда я касаюсь / щелкаю за пределами панели поиска. Я использую searchbardelegate как требуется.

Я могу скрыть клавиатуру, используя [searchBar resignFirstResponder] следующими способами.

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

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {    
        UITouch *touch = [[event allTouches] anyObject];
        if ([mySearchBar isFirstResponder] && [touch view] != mySearchBar) {
            [mySearchBar resignFirstResponder];
        }
        [super touchesBegan:touches withEvent:event];
    }
    

То, что я, похоже, не могу сделать, это заставить его реагировать на прикосновение к одному из моих двух видов таблицы. Или когда я пополняю основной вид, чтобы он содержал что-то совершенно другое.

Я пытался изменить метод touchesbegan, чтобы оставить панель поиска при прикосновении к табличным представлениям, но пока это не сработало.

Я пробовал несколько других вещей, найденных моим дорогим другом мистером. Google, но все это, кажется, что-то другое, чем мне нужно.

У кого-нибудь есть идеи, что я могу сделать, чтобы решить эту проблему?

EDIT: Похоже, что при использовании точек останова touch-began-метод реагирует на фоновое представление, но не реагирует, когда я касаюсь либо вида таблицы, либо панели навигации (содержащей панель uisearch).

Ответы [ 2 ]

13 голосов
/ 23 сентября 2011

Решено!

- (BOOL) searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
    [self.myViewController1.customView1 setUserInteractionEnabled:NO];
    [self.myViewController2.customView2 setUserInteractionEnabled:NO];   
    [searchBar setShowsCancelButton:YES animated:[mySettings animation]];
    return YES;   
}

Я начал с отключения userInteraction на моих 2 подпредставлениях, в тот момент, когда я начал использовать панель поиска.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{    
    UITouch *touch = [[event allTouches] anyObject];
    if ([self.mySearchBar isFirstResponder] && [touch view] != self.mySearchBar) 
    {
        [self.mySearchBar resignFirstResponder];
        [self.myViewController1.customView1 setUserInteractionEnabled:YES];
        [self.myViewController2.customView2 setUserInteractionEnabled:YES];
    }
    [super touchesBegan:touches withEvent:event];
}

Затем, когда я нажимаю /коснитесь / коснитесь за пределами панели поиска. Сначала я переставляю клавиатуру, которая все еще является первым респондентом, И ПОСЛЕ того, что я снова включил userInteraction для 2 подпредставлений.Порядок выполнения этого крайне важен!

Этот фрагмент кода позволяет вам переназначить клавиатуру в одном mainViewController, даже когда она переполнена массой подпредставлений.

0 голосов
/ 04 сентября 2013

Вы пробовали это,

UISearchBar *searchBar;

Далее установите свойство Getter and Setter равным UISearchBar.

и вызовите любой метод

[searchBar resignFirstResponder];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...