Какое событие вызывается, когда мы нажимаем UISearchBar - PullRequest
11 голосов
/ 25 августа 2010

В моем приложении мне нужно выполнить некоторые действия, например, нажать контроллер другого представления, когда я нажимаю на панель UISearch, которая добавляется в представление.

, что является лучшим подходом для достижения этой цели.

Какво-первых, когда мы нажимаем UISearchbar «searchBarTextDidBeginEditing», меня увольняют, но с моим сценарием, когда я нажимаю контроллер представления в «searchBarTextDidBeginEditing» и возвращаюсь, searchBarTextDidBeginEditing вызывается снова, поэтому кажется, что это не идеальное место для нажатия контроллера представления.

Это maincontroller

// Search bar
  iSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 40)];
  iSearchBar.delegate = self;
  iSearchBar.showsCancelButton = NO;
  iSearchBar.autocorrectionType = UITextAutocorrectionTypeNo;
  iSearchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
  [self addSubview:iSearchBar];

, когда я нажимаю UISearchBar, тогда он вызывает

   - (void)searchBarTextDidBeginEditing:(UISearchBar*)searchBar
   {
   [self ShowMySearch];
   }

В ShowMySearch, я нажимаю какой-то другой контроллер, скажем, searchcontroller, а когда вывести этот searchcontroller и прийтивернуться к maincontroller "searchBarTextDidBeginEditing" снова получить вызов и searchcontroller снова выдвигается и вызывает проблему.это поведение наблюдается только на 3.1.1

Спасибо,

Сагар

Ответы [ 2 ]

16 голосов
/ 26 августа 2010

Я думаю, что вызывать [self ShowMySearch] в "searchBarTextDidBeginEditing" слишком поздно.Я предполагаю, что "searchBarTextDidBeginEditing" вызывается при ответе на панель поиска, становящуюся первым респондентом.Так как это первый респондент, когда контроллер поиска выдвигается, он, вероятно, снова становится первым респондентом, когда ваш контроллер поиска выскакивает ... таким образом, снова вызывая "searchBarTextDidBeginEditing".

Для достижения этого я быuse:

  • (BOOL) searchBarShouldBeginEditing: (UISearchBar *) searchBar

Этот метод вызывается после касания панели поиска, но до того, как он становится первым респондентом.И если вы вернете НЕТ, он никогда не станет первым респондентом:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar {
    [self ShowMySearch];
    return NO;
}

Дайте мне знать, если это работает!

1 голос
/ 12 апреля 2019

для Swift 5.

func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
        handleShowSearchVC()
        return false
    }

    @objc func handleShowSearchVC() {
        let modalUserSearchController = UserSearchController(collectionViewLayout: UICollectionViewFlowLayout())
        modalUserSearchController.modalPresentationStyle = .overCurrentContext

        //Mini app panel.
        //vc.view.frame = CGRectMake(0, vc.view.frame.size.height - 120, vc.view.frame.size.width, 120)

        //Present #1
        // present(modalUserSearchController, animated: true, completion: nil)

        //Presentation #2
        navigationController?.pushViewController(modalUserSearchController, animated: true)
    }
...