导航栏搜索结果

时间:2015-06-17 11:07:38

标签: ios iphone swift ipad

我想直接在我的导航栏中添加搜索(例如Apple Maps)。

enter image description here

所以这没有问题,生病只是创建为搜索栏:

    searchBar.placeholder = "Gebäude und Räume suchen"
    var rightNavBarButton = UIBarButtonItem(customView: searchBar)
    self.navigationItem.rightBarButtonItem = rightNavBarButton

但是我应该如何解决结果呢?第一次尝试使用自适应弹出窗口,并且如果用户输入至少2个字母,则加载弹出框并显示结果(因此我能够在iPad上显示弹出框,并在iPhone上获得全屏视图) - 但如果弹出窗口仍然可见,我需要检查每个按键,如果有自适应弹出窗口,我还需要在子控制器上创建搜索栏。

所以我不确定如何解决Apple Maps(iPhone和iPad版)等问题 - 任何人都可以给我一些tipps我该怎么做?那是一个波普吗?自定义视图?

非常感谢任何帮助。

编辑:

最简单的方法(这就是它的atm外观) - 我有一个带有搜索图标的按钮,如果用户点击了这个搜索按钮,则会加载一个"搜索"控制器(带有一个搜索栏) - 如果用户点击一个结果,那就去"返回"并在地图上显示结果。

但我更喜欢像苹果地图应用程序(iPad和iPhone版本之间的区别)

3 个答案:

答案 0 :(得分:3)

你需要检查一次。我认为这个答案会对你有所帮助。

Googlemap searchbar

请先查看以上链接。你会得到你的答案。它是客观的-c但您可以从中获取参考。

String filePath = "/content/dam/sbi/personal/docs/Sbi FB Deals Done.pdf";
InputStream fileStream = null;
try {
    Asset asset = resolver.resolve(filePath).adaptTo(Asset.class);
    fileStream = asset.getOriginal().getStream();
    //do whatever you need to do with the stream
} catch (IOException e) {
} finally {
    IOUtils.closeQuietly(fileStream);
}

答案 1 :(得分:1)

我明白为什么这会令人困惑。您要查找的功能过去由UISearchDisplayControllerUISearchDisplayDelegate提供。但是这些方法在iOS 8中已弃用。

这些天的方法是使用UISearchController。文档很好地解释了它:

  

使用initWithSearchResultsController:方法创建新的搜索控制器,传入管理要显示的内容的视图控制器。 searchResultsUpdater属性包含负责更新结果的对象。通常,searchResultsUpdater属性中包含的对象与初始化期间设置的视图控制器相同。但是,如果您已创建自己的模型对象以过滤和回复查询,则可以将其设置为searchResultsUpdater

UISearchControllerDelegate提供了用于呈现和解除搜索结果的回调机制。

答案 2 :(得分:1)

iPad中的苹果使用的是UIPopover,我之前使用以下代表为自定义地图应用做了完全相同的事情:

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    //init a searchPopover with the view you want to show the results in and then call it 
    [self.searchPopover presentPopoverFromRect:[self.search bounds] inView:self.search permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

- (void)searchBarTextDidEndEditing:(UISearchBar *)aSearchBar
{
    [self.searchPopover dismissPopoverAnimated:YES];;
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {

    //update the tableview that is in the searchPopover
    //searchView is the view inside the popOver, filterResults is a custom method with an NSPredicate inside. 
    [self.searchView filterResultsUsingString:searchText];
}

在将显示结果的视图控制器中,您实现委派,以便当用户在该视图中按下所需的按钮或行时,将显示父视图并解除弹出窗口,您可以放大所需的注释。

-(void)didSelectResult:(id)annotation
{   
    //so when you select the result, and call this delegate method:
    self.annotationToSelect = annotation;
    [self.searchBar resignFirstResponder];
    self.search.text = @"";
    [self.searchPopover dismissPopoverAnimated:YES];

}