7

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

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

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

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

    - (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]; 
    } 
    

Что я, кажется, не в состоянии сделать, это сделать его реагировать на прикосновения одного из моих 2 tableviews. Или когда im наполняет mainview, чтобы содержать что-то совершенно другое.

Ive попробовал изменить метод touchhesbegan, чтобы отменить поисковую панель при касании таблиц, но до сих пор не работал.

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

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

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

ответ

13

Решено!

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

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

- (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]; 
} 

Затем, когда я нажимаю/TAP/касание вне SearchBar я первый уволиться клавиатуру, которая является первым ответчиком до сих пор, и после этого я поставил userInteraction обратно за 2 подвидов. Порядок выполнения этого очень важен!

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

0

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

UISearchBar *searchBar; 

Следующая установить Getter и Setter собственности UISearchBar.

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

[searchBar resignFirstResponder]; 
Смежные вопросы