带有地图应用行为的搜索栏(选中时导航栏全宽)

时间:2013-11-04 17:56:03

标签: ios iphone uinavigationbar uisearchbar uisearchdisplaycontroller

我试图显示与原生地图应用中的搜索栏完全相同的搜索栏。我的意思是:

  • 导航栏标题视图中的搜索栏
  • 选中后,搜索栏占据导航栏的整个宽度,并显示SearchDisplayController

到目前为止,我设法得到以下行为:

enter image description here

正如您在上面所看到的,我无法让搜索栏在选择时占据整个宽度。虽然,全宽+取消按钮似乎是与SearchDisplayController挂钩的搜索栏的默认行为,至少如果搜索栏没有添加到导航栏!

我错过了明显的做法吗?或者,在调用searchBarShouldBeginEditing时,我是否必须自己自定义导航栏?

2 个答案:

答案 0 :(得分:0)

只要我没有完美的解决方案,我就会做以下事情。但我仍然愿意接受更好的事情!

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(onCancel)];
    [UIView animateWithDuration:0.1 animations:^(){
        self.navigationItem.leftBarButtonItem = nil;
    }];
return YES;
}

- (void)onCancel {
    [self.searchController setActive:NO];
}

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
    [UIView animateWithDuration:0.1 animations:^(){
        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"OpenMenuButton.png"] style:UIBarButtonItemStylePlain target:self action:@selector(openSideMenu:)];
    }];
    self.navigationItem.rightBarButtonItem =self.doneButton;
    return YES;
}

此外,我想知道地图应用程序是否实际使用了导航控制器,因为有一些自定义行为(titleView的宽度,leftBarButton的动画在屏幕外)令我感到惊讶。

答案 1 :(得分:0)

您是否在寻找UISearchDisplayController + UISearchBar之类的内容? http://petersteinberger.com/blog/2013/fixing-uisearchdisplaycontroller-on-ios-7/