使用 UISegmentControl 切换视图时 UISearchBar 消失
Posted
技术标签:
【中文标题】使用 UISegmentControl 切换视图时 UISearchBar 消失【英文标题】:UISearchBar disappears when switching views with UISegmentControl 【发布时间】:2016-12-12 16:46:56 【问题描述】:我在我创建的 tableView 侧边栏中有一个 UISearchBar (& UISearchDisplayController)(见附图)。当我的 UINavigationBar 中的按钮被点击时,它是可见的。在我的地图视图控制器内部,导航栏中有一个 UISegmentControl,它允许我的用户在视图(mapView 和friendsMapView)之间来回切换。
由于某种原因,UISearchBar 在最初打开时在侧栏中显示得很好。但是,当我点击段控件切换到friendsMapView,然后返回mapView 时,我的UISearchBar 消失了(见图)。
知道为什么会这样吗?我已经在 StoryBoard 中实现了上述内容。请参阅下面的 segmentControl 代码(不确定这是否有帮助):
.m
-(IBAction)segmentControl:(id)sender
UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UITableViewController *menuController;
menuController = [storyBoard instantiateViewControllerWithIdentifier:@"neighbourMenu"];
self.title = @"Controller 1";
switch (self.segmentControl.selectedSegmentIndex)
case 0:
[mapView setHidden:NO];
[friendsMapView setHidden:YES];
menuController = [storyBoard instantiateViewControllerWithIdentifier:@"neighbourMenu"];
break;
case 1: //FRIENDS MAP VIEW
menuController = [storyBoard instantiateViewControllerWithIdentifier:@"FriendMenu"];
// self.title = @"Item 1";
[mapView setHidden:YES];
[friendsMapView setHidden:NO];
//FRIENDS MAPVIEW LOCATION/ZOOM
friendsMapView.delegate = self;
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
#ifdef __IPHONE_8_0
if(IS_OS_8_OR_LATER)
[self.locationManager requestWhenInUseAuthorization];
// [self.locationManager requestAlwaysAuthorization];
#endif
[self.locationManager startUpdatingLocation];
friendsMapView.showsUserLocation = YES;
[friendsMapView setMapType:MKMapTypeStandard];
[friendsMapView setZoomEnabled:YES];
[friendsMapView setScrollEnabled:YES];
break;
case 2:
[mapView setHidden:YES];
[friendsMapView setHidden:YES];
break;
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:menuController];
[self.revealViewController setRearViewController:nc];
【问题讨论】:
您可能只想根据segmentedControl
选项的选择来显示/隐藏mapView
和friendsMapView
。我不确定为什么每次用户选择一个选项表单segmentedControl
时你都要更改revealViewController
的rearViewController
?
@Adeel 因为在显示friendsMapView 时侧边栏中会显示不同的菜单(显示mapView 时显示一个菜单,显示friendsMapView 时显示不同的菜单)。
恐怕您提供的信息还不够。请分享您设置为后视图控制器的视图控制器。你做过调试吗?请分享您对这个问题的发现。
【参考方案1】:
我不知道您当前的视图控制器,但您似乎正在下面设置一个新的导航控制器,并且您当前的视图控制器的导航栏有搜索栏,但新的导航控制器没有。
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:menuController];
[self.revealViewController setRearViewController:nc];
【讨论】:
您是 100% 正确的 - 因为当我注释掉这些行时,搜索工作正常。那么我是否也应该简单地在另一个 tableview 中进行搜索? 这是一种方式,但正如我所见,您有一个容器视图控制器,并且您正在更改此控制器内的视图控制器。因此,如果您想更改主布局,只需将 viewcontroller 的视图添加到容器视图即可。它使用搜索栏保存当前导航栏。在revealViewcontroller 中你可以使用[self.view addSubview:CHANGED_VIEWCONTROLLER.view];
以上是关于使用 UISegmentControl 切换视图时 UISearchBar 消失的主要内容,如果未能解决你的问题,请参考以下文章
尝试从 UISegmentControl 中的子视图启动 UINavigationController