使用 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 选项的选择来显示/隐藏mapViewfriendsMapView。我不确定为什么每次用户选择一个选项表单segmentedControl 时你都要更改revealViewControllerrearViewController @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

以编程方式 Swift Segue

UISegmentControl,UISwich,UIPageControl

使用分段控件的默认 UIView?

更改数据源时 UICollectionView 中的平滑动画