Переключение между двумя UIViewControllers в панели навигации внизу

Я создал UIViewController, содержащий два других UIViewController. Что я хотел бы сделать, используя UISegment в UINavigationBar, так это переключаться между обоими представлениями. Когда пользователь закончит, он нажмет «Готово», и он вернется к RootViewController. Я заставил это работать, за исключением того, что UIViewControllers занимают размер всего экрана, поэтому верхняя часть покрыта UINavigationBar. Они не подстраиваются под UINavigationBar. Пробовал разные техники, безуспешно.

Я уже пробовал в ChildUIViewControllers без успеха

self.edgesForExtendedLayout = UIRectEdgeNone;

Вот мой код:

RootViewController вызывает контейнер

ContainerController *controller = [[ContainerController alloc] init]
[self.navigationController pushViewController:controller animated:YES];

Код контейнера

- (void)viewDidLoad {

[super viewDidLoad];
UIViewController *vc = [self getCurrentViewController]; // Returns Current ViewController to Display
[self addChildViewController:vc];
vc.view.frame = self.view.bounds;
[self.view addSubview:vc.view];

self.currentViewController = vc;
}

-(UIViewController *)getCurrentViewController{
UIViewController *vc;
switch ([[NSUserDefaults standardUserDefaults] integerForKey:@"currentView"]) {
    case kView1:{
        vc = (ViewController1 *)[[ViewController1 alloc] init];
    }break;
    case kView2:{
        vc = (ViewController2 *)[[ViewController2 alloc] init];
    }break;
}
return vc;
}

- (void)segmentedControlIndexChanged:(id)sender{

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:[NSNumber numberWithInt:[sender selectedSegmentIndex]] forKey:@"currentView"];
[userDefaults synchronize];
UIViewController *vc = [self getCurrentViewController];

[self addChildViewController:vc];
[self transitionFromViewController:self.currentViewController toViewController:vc duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
    [self.currentViewController.view removeFromSuperview];
    vc.view.frame = self.view.bounds;
    [self.view addSubview:vc.view];
} completion:^(BOOL finished) {
    [vc didMoveToParentViewController:self];
    [self.currentViewController removeFromParentViewController];
    self.currentViewController = vc;
}];
self.navigationItem.title = vc.title;
}

Кто-нибудь знает, в чем проблема? Спасибо.




Ответы (1)


Я нашел решение. Причина, по которой табличное представление находилось под панелью навигации, заключалась в полупрозрачности панели навигации. Когда я установил это:

self.navigationController.navigationBar.translucent = NO;

Представления остались под панелью навигации. Над UITableView все еще была черная полоса. Я исправил эту проблему, вместо использования UITableViewController я использовал UIViewController и добавил tableView. Вот некоторый код для цикла между двумя представлениями в контейнере uiviewcontroller:

- (void)viewDidLoad {
self.viewController1 = [[ViewController1 alloc] init];
self.viewController2= [[ViewController2 alloc] init];

switch ([[NSUserDefaults standardUserDefaults] integerForKey:@"dataView"]) {
case kDataView:{
    self.viewController1.view.hidden=YES;
    self.viewController2.view.hidden=NO;
}break;
case kChartView:{
    self.viewController1.view.hidden=NO;
    self.viewController2.view.hidden=YES;
}break;
}

[self.view addSubview:self.viewController1.view];
[self.view addSubview:self.viewController2.view];
}

 - (void)segmentedControlIndexChanged:(id)sender{

    if ([[NSUserDefaults standardUserDefaults] integerForKey:@"dataView"]!=[sender selectedSegmentIndex]){
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:[NSNumber numberWithInteger:[sender selectedSegmentIndex]] forKey:@"dataView"];
    [userDefaults synchronize];

    self.segmentedControl.selectedSegmentIndex=[[NSUserDefaults standardUserDefaults] integerForKey:@"dataView"];

    switch (self.segmentedControl.selectedSegmentIndex) {
        case kDataView:{
            self.viewController1.view.hidden=YES;
            self.viewController2.view.hidden=NO;
        }break;
        case kChartView:{
            self.viewController1.view.hidden=NO;
            self.viewController2.view.hidden=YES;
        }break;
    }
}

}

person d264789    schedule 02.02.2015