我已经创建了一个带有UITabbar的UIViewController。
我没有使用UITabbarController,因为我想在屏幕顶部显示UITabbar。
单击tab1时,我想显示controller1,然后单击tab2我想要显示控制器2.我不想隐藏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)即使在使用UITabbarDelegate
后也未触发 didSelectItem 方法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];
试过这个,但它隐藏了标签栏。我想利用标签栏下方的空间来显示控制器
答案 0 :(得分:2)
你需要做的是有一个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.
}
}
答案 1 :(得分:1)
我建议使用UITabBarController而不是UIViewController。
在StoryBoard中添加UITabViewController,将它命名为FirstTabBarController。
将子视图控制器添加到FirstTabBarController。在您添加UITabbar的所有子视图中。将TabBar委托连接到每个子ViewController。
在默认的FirstTabBarController中隐藏默认的TabBar。
endsWith()
在您的子ViewController中将操作添加到TabBar
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBar.isHidden = true;
[self setSelectedIndex:1];
}
我更喜欢这种方法而不是手动添加或删除ViewController作为子视图,让UITabBarController为您管理。如果您有进一步的询问,请告诉我。