2017-07-26 64 views
0

我已经创建了一个UITabController,里面有一个UITabbar。点击UITabbarItem后打开UIViewController

enter image description here

我没有使用的UITabBarController,因为我想在屏幕的顶部UITabbar。

单击tab1时,我想呈现controller1并单击tab2我想呈现控制器2.我不希望tabbar隐藏。我想在tabbar下面显示控制器。

@interface MTLeaderFactoViewController() <UITabBarDelegate> 
@property (weak, nonatomic) IBOutlet UITabBar *tabBar; 
@end 

@implementation MTLeaderFactoViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
} 

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { 
    if (item.tag == 0) { 
     NSLog(@"item tag 0"); 
    } else { 
     NSLog(@"item tag 1"); 
    } 
} 
@end 

我的问题:

1)didSelectItem即使使用UITabbarDelegate

2)什么是一个按钮,点击后显示控制器的最优雅的方式后方法不会被触发?我不想使用segue,因为所有的控制器都在不同的故事板中。 现在,我打算做

Controller1 *fp = [Controller1 controllerStoryboard:STORYBOARD_COURSE]; 
[self addChildViewController:fp]; 
[self.view addSubview:fp.view]; 
[fp didMoveToParentViewController:self]; 

编辑1:

Controller1 *fp = [Controller1 controllerStoryboard:STORYBOARD_COURSE]; 
    [self addChildViewController:fp]; 
    [self.view addSubview:fp.view]; 
    [fp didMoveToParentViewController:self]; 

试过,但它隐藏标签栏。我想利用标签栏下方的空间来显示控制器

+1

你是否将'UITabbarDelegate'设置为'MTLeaderFactoViewController'?只是实现委托方法不会调用委托方法。 – Priyal

+1

将TabBar委托连接到xib/StoryBoard中的ViewController –

+0

哦,上帝,我的坏。感谢您指出了这一点。 –

回答

1

你需要做的是有一个basecontroller类,它将包含一个tabbar(以编程方式创建),然后你可以达到期望的输出继承人一个样本baseController,我创建

import UIKit 

class BaseViewController: UIViewController,UITabBarDelegate{ 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let myTabBar = UITabBar() 
     myTabBar.frame = CGRect(x: 0, y: 60, width:self.view.frame.size.width, height: 50) 

     let one = UITabBarItem() 
     one.title = "one" 
     one.tag = 1 
     let two = UITabBarItem() 
     two.title = "two" 
     two.tag = 2 
     myTabBar.setItems([one,two], animated: false) 
     self.view.addSubview(myTabBar) 
     myTabBar.delegate = self 

    } 


    func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 
     switch item.tag { 
     case 1: 
      let controller = storyboard?.instantiateViewController(withIdentifier: "SecondViewController") 
      addChildViewController(controller!) 
      view.addSubview((controller?.view)!) 
      controller?.didMove(toParentViewController: self) 
      break 
     case 2: 
      let controller = storyboard?.instantiateViewController(withIdentifier: "ViewController") 
      addChildViewController(controller!) 
      view.addSubview((controller?.view)!) 
      controller?.didMove(toParentViewController: self) 
      break 
     default: 
      break 
     } 

    } 

} 

视图控制器类:

import UIKit 

class ViewController: BaseViewController { 


    override func viewDidLoad() { 
     super.viewDidLoad() 
       // Do any additional setup after loading the view, typically from a nib. 
    } 


} 

SecondView控制器:

import UIKit 

class SecondViewController: BaseViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 



} 
+0

这隐藏了标签栏。请检查我编辑1 –

+0

我试过一个演示,请检查我的答案视图控制器是一个基本的视图控制器,因此标签栏不会隐藏在任何时间 –

+0

在标签栏下创建一个更多的视图添加控制器的视图:)谢谢! –

1

我会建议使用UITabBarController而不是UIViewController。

在您的StoryBoard中添加UITabViewController将其命名为FirstTabBarController。

将子视图控制器添加到FirstTabBarController。在添加UITabbar的所有子视图中。将TabBar委托连接到您的每个子ViewController。

在默认的FirstTabBarController中隐藏默认的TabBar。

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.tabBar.isHidden = true; 
    [self setSelectedIndex:1]; 
    } 

在你的孩子的ViewController到的TabBar加入行动

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { 
    NSUInteger index = [[theTabBar items] indexOfObject:item]; 
    NSLog(@"Tab index = %u", (int)indexO); 
    [self.navigationController.tabBarController setSelectedIndex:index]; 
} 

我宁愿这种方法比手动添加添加或删除视图控制器作为子视图,让管理的UITabBarController适合您。如果您有进一步的疑问,请告诉我。

+0

我将在Objective-C中更新ans。 – luckyShubhra

+0

嘿 - 那应该没问题。我对swift也很熟悉:)我没有使用UITabbarController,因为tabbar在默认情况下处于底部,我不想添加黑客来将它移动到顶部。 –

+0

如果我使用UITabbar的方法,你认为它可能会导致问题? –