在我的应用程序中,当我点击在视图中添加的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的
答案 0 :(得分:16)
我认为在“searchBarTextDidBeginEditing”中调用[self ShowMySearch]有点太晚了。 我想在调用搜索栏成为第一响应者时调用“searchBarTextDidBeginEditing”。由于它是推送搜索控制器时的第一个响应者,当你的搜索控制器被拔出时它可能再次成为第一响应者...因此再次调用“searchBarTextDidBeginEditing”。
要实现这一目标,我会使用:
在点击搜索栏但在它成为第一个响应者之前调用此方法。如果你返回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)
}