当我们点击UISearchBar时会调用哪个事件

时间:2010-08-25 12:14:55

标签: iphone ipad uisearchbar

在我的应用程序中,当我点击在视图中添加的UISearchbar时,我需要做一些活动,即推送otherview控制器。

实现这一目标的最佳方法是什么。

有一件事就是当我们点击UISearchbar“searchBarTextDidBeginEditing”被解雇时,但是当我在“searchBarTextDidBeginEditing”中推送视图控制器并返回searchBarTextDidBeginEditing再次调用时,我的场景似乎不是理想的推送视图控制器的地方

这是主控制器

// 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

上显示

谢谢,

Sagar的

2 个答案:

答案 0 :(得分:16)

我认为在“searchBarTextDidBeginEditing”中调用[self ShowMySearch]有点太晚了。 我想在调用搜索栏成为第一响应者时调用“searchBarTextDidBeginEditing”。由于它是推送搜索控制器时的第一个响应者,当你的搜索控制器被拔出时它可能再次成为第一响应者...因此再次调用“searchBarTextDidBeginEditing”。

要实现这一目标,我会使用:

  • (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

在点击搜索栏但在它成为第一个响应者之前调用此方法。如果你返回NO,它永远不会成为第一个响应者:

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

让我知道这是否有效!

答案 1 :(得分:1)

对于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)
    }