2017-07-26 98 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的方法,你認爲它可能會導致問題? –