2017-04-20 99 views
0

我想切换子控件的子视图控制器。切换子视图控制器使用分段控件

故事板中有vc1和vc2,主vc的导航控制栏上有段控制。

我想在主vc上添加vc1和vc2,如何切换sub vc使用段控制器?

enter image description here

如何做呢?

+0

在这里你需要去tabbar控制器 –

+0

@ Anbu.Karthik我可以使用子视图控制器做到这一点吗? –

+0

@qg_java使用'Containerview',请查看本教程中关于它的内容。https://spin.atomicobject.com/2015/09/02/switch-container-views/或者这一个https:// cocoacasts。 com /管理视图控制器与容器视图控制器/ –

回答

2

请按以下步骤操作。

  1. 将VC1作为mainVC的childVC添加VC1 &。

  2. 在段1个选择VC1.view.hidden = false & vc2.view.hidden = true

  3. 在段2选择VC2.view.hidden = false & vc1.view.hidden = true

采取参考

  1. How-to-add-childVC

  2. How-tobind-segment-control-action

代码工作

@IBAction func indexChanged(_ sender: AnyObject) { 
    switch segmentedControl.selectedSegmentIndex 
    { 
    case 0: 
     vc1.view.hidden = false 
     vc2.view.hidden = true 
    case 1: 
     vc2.view.hidden = false 
     vc1.view.hidden = true 
    default: 
     break 
    } 
} 
+0

你能解释更详细的abuot吗?我的朋友。 –

+0

检查更新的消息。 –

0

您应该添加VC,以及vc.view到主视图控制器:

当您选择分段控制,你可以隐藏子视图控制器的视图如下:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    _vc1 = [sb instantiateViewControllerWithIdentifier:@"ViewController1"]; 
    _vc2 = [sb instantiateViewControllerWithIdentifier:@"ViewController2"]; 

    [self addChildViewController:_vc1]; 
    [self addChildViewController:_vc2]; 
    [self.view addSubview:_vc1.view]; 
    [self.view addSubview:_vc2.view]; 

} 


- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 
- (IBAction)segAction:(UISegmentedControl *)sender { 

    if (1 == sender.selectedSegmentIndex) { 
     NSLog(@"1"); 

     _vc1.view.hidden = YES; 
     _vc2.view.hidden = NO; 
    }else { 
     NSLog(@"%ld", sender.selectedSegmentIndex); 
     _vc2.view.hidden = YES; 
     _vc1.view.hidden = NO; 
    } 

} 
0

接受的答案显然是正确的,但我真的更喜欢使用UISegmentedControl中每个选项卡的容器视图。这样,与每个视图相关的逻辑就会在不同的视图控制器中分离。您可以以这种方式实现这一目标:

enter image description here

class TopViewController: UIViewController { 

    @IBOutlet weak var firstContainerView: UIView! 
    @IBOutlet weak var secondContainerView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     firstContainerView.alpha = 1.0 
     secondContainerView.alpha = 0.0 
    } 

    @IBAction func didChangeIndex(_ sender: UISegmentedControl) { 
     switch sender.selectedSegmentIndex { 
     case 0: 
      firstContainerView.alpha = 1.0 
      secondContainerView.alpha = 0.0 
     case 1: 
      firstContainerView.alpha = 0.0 
      secondContainerView.alpha = 1.0 
     default: 
      break 
     } 
    } 
} 

如果您想访问FirstViewController或SecondViewController的特性,可以实现prepare(for segue: UIStoryboardSegue, sender: Any?)方法。