使用UISegmentControl切换视图时,UISearchBar消失了。

6

我有一个位于表视图侧边栏中的 UISearchBar(和 UISearchDisplayController),如所附照片所示。当我的 UINavigationBar 中的按钮被点击时,它变得可见。在我的地图视图控制器中,我在导航栏中使用了一个 UISegmentControl,允许用户在视图之间切换(mapView 和 friendsMapView)。

enter image description here

由于某种原因,当初始打开时,UISearchBar在侧边栏中显示得很好。但是当我点击分段控件切换到friendsMapView,然后返回到mapView时,我的UISearchBar消失了(见照片)。

enter image description here

你知道这是为什么吗?我已经在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 Miraj
@Adeel 因为当 friendsMapView 被显示时,侧边栏中会出现不同的菜单(当 mapView 被显示时,会出现一个菜单,而当 friendsMapView 被显示时,则会出现另一个不同的菜单)。 - Brittany
很抱歉,您提供的信息不足。请分享您设置为后视图控制器的视图控制器。您是否进行了任何调试?请分享您对问题的发现。 - Adeel Miraj
1个回答

2

我不知道你当前的视图控制器是什么,但是看起来你在下面设置了一个新的导航控制器,而你当前的视图控制器的导航栏有搜索栏,但是新的导航控制器没有。

UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:menuController];
[self.revealViewController setRearViewController:nc];

你是100%正确的 - 因为当我注释掉那些行时,搜索就可以正常工作。那么我应该也在另一个表格视图中放置一个搜索吗? - Brittany
1
这是一种方法,但我看到您有一个容器视图控制器,并且您正在更改此控制器内的视图控制器。因此,如果要更改主布局,请将视图控制器的视图添加到容器视图中。它会保存当前的导航栏和搜索栏。在revealViewcontroller中,您可以使用[self.view addSubview:CHANGED_VIEWCONTROLLER.view]; - abdullahselek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接