Ame*_*has 9 objective-c uitabbarcontroller ios
我正在开发更有可能是tabBarController应用程序的应用程序.但我不能使用,tabBarController因为我需要tab在底部的自定义处理程序,我需要项目之间的自定义空间.所以我正在创建自定义tabBarController.
我想知道最好的方法.目前,我的做法是在这种方式(使用storyboard和iOS6): -我花了一个UIToolbar关于ViewController其将作为底行动tab吧(CustomTabBarViewController).我拿了ContainerViews每个标签.当用户选择一个项目时toolbar,我会显示containerView.
请告诉我,如果我出错或指导最佳方式.谢谢.
Eug*_*ene 17
你这样做非常错误.如果只能使用默认视图层次结构,请不要创建自定义视图层次结构.
你想要做的是创建一个子类,UITabBarController并创建一个.xib文件,它将包含你的自定义标签栏 - 只是一个图像和任意数量的UIButtons(我想5).

为所有这些标签设置标签,只需1-5个标签,您可以使用自定义UIView子类来完成,但在这种情况下这将是多余的,因此它只是用标签获取控件.
创建一个子类UITabBarController.您需要引用所有这些按钮以及属性以查看最后按下了哪个按钮,因此您可以适当地更新UI.还为不同的控制状态分配不同的图像或标题,我使用默认值并在这种情况下选择.
MYBaseTabBarController.h
@interface MYBaseTabBarController : UITabBarController
@property (strong, nonatomic) UIButton *btn1;
@property (strong, nonatomic) UIButton *btn2;
@property (strong, nonatomic) UIButton *btn3;
@property (strong, nonatomic) UIButton *btn4;
@property (strong, nonatomic) UIButton *btn5;
@property (weak, nonatomic) UIButton *lastSender;
@property (strong, nonatomic) UIView *tabBarView;
@end
Run Code Online (Sandbox Code Playgroud)
MYBaseTabBarController.m
首先,创建视图控制器(UINavigationController在这种情况下都是子类)并将它们UITabBarController作为viewControllers属性分配给您的子类.
- (id)init {
self = [super init];
if (self) {
[self setup];
}
return self;
}
- (void)setup {
NSMutableArray *viewControllers = [NSMutableArray array];
MYViewController1 *viewController1 = [[MYStoryboardManager storyboard1] instantiateInitialViewController];
viewController1.title = @"1";
[viewControllers addObject:viewController1];
MYViewController2 *viewController2 = [[MYStoryboardManager storyboard2] instantiateInitialViewController];
viewController2.title = @"2";
[viewControllers addObject:viewController2];
UIViewController *blankController = [UIViewController new]; // Center button, performs an action instead of leading to a controller
[viewControllers addObject:blankController];
MYViewController3 *viewController3 = [[MYStoryboardManager storyboard3] instantiateInitialViewController];
viewController3.title = @"3";
[viewControllers addObject:viewController3];
MYViewController3 *viewController4 = [[MYStoryboardManager storyboard4] instantiateInitialViewController];
viewController4.title = @"4";
[viewControllers addObject:viewController4];
self.viewControllers = viewControllers;
}
Run Code Online (Sandbox Code Playgroud)
接下来抓住您之前创建的按钮,并在-viewDidLoad方法中为它们分配操作:
- (void)viewDidLoad {
[super viewDidLoad];
_tabbarView = [[[NSBundle mainBundle] loadNibNamed:@"MyTabBar" owner:nil options:nil] lastObject]; // "MyTabBar" is the name of the .xib file
_tabbarView.frame = CGRectMake(0.0,
self.view.frame.size.height - _tabbarView.frame.size.height,
_tabbarView.frame.size.width,
_tabbarView.frame.size.height); // make it overlay your actual tab bar
[self.view addSubview:_tabbarView];
_btn1 = (UIButton *)[_tabbarView viewWithTag:1];
[_btn1 addTarget:self action:@selector(processBtn:) forControlEvents:UIControlEventTouchUpInside];
_btn2 = (UIButton *)[_tabbarView viewWithTag:2];
[_btn2 addTarget:self action:@selector(processBtn:) forControlEvents:UIControlEventTouchUpInside];
_btn3 = (UIButton *)[_tabbarView viewWithTag:3];
[_btn3 addTarget:self action:@selector(processBtn:) forControlEvents:UIControlEventTouchUpInside];
_btn4 = (UIButton *)[_tabbarView viewWithTag:4];
[_btn4 addTarget:self action:@selector(processBtn:) forControlEvents:UIControlEventTouchUpInside];
_btn5 = (UIButton *)[_tabbarView viewWithTag:5];
[_btn5 addTarget:self action:@selector(processBtn:) forControlEvents:UIControlEventTouchUpInside];
_lastSender = _btn1;
[self setSelectedViewController:self.viewControllers[0]]; // make first controller selected
}
Run Code Online (Sandbox Code Playgroud)
添加处理方法:
- (void)processBtn:(UIButton *)sender {
_lastSender = sender;
[self setSelectedViewController:[self.viewControllers objectAtIndex:sender.tag - 1]];
}
Run Code Online (Sandbox Code Playgroud)
最后覆盖-setSelectedViewController:方法:
- (void)setSelectedViewController:(UIViewController *)selectedViewController {
if (_lastSender != _btn3) { // check if it's not the action button
for (UIButton *btn in [_tabbarView subviews]) {
if ([btn isKindOfClass:[UIButton class]]) {
if (btn == _lastSender) {
btn.selected = YES;
}
else {
btn.selected = NO;
}
}
}
}
if ([self.viewControllers indexOfObject:selectedViewController] == 2) {
MYActionController *viewController = [[MYStoryboardManager actionStoryboard] instantiateInitialViewController];
[self presentViewController:viewController animated:YES completion:nil];
}
else {
if (self.selectedViewController == selectedViewController) {
[(UINavigationController *)self.selectedViewController popToRootViewControllerAnimated:animate]; // pop to root if tapped the same controller twice
}
[super setSelectedViewController:selectedViewController];
}
}
Run Code Online (Sandbox Code Playgroud)
我假设您正在使用ARC进行编程,并且您有一个管理故事板的课程,但无论如何这都非常简单.
为了获得以下视图,您需要遵循以下步骤:-
1:获取一个 UITabBarController 并将其设置为应用程序窗口的 rootViewController。
2:现在将五个选项卡添加到此 UITabbarController 。
3:为每个Tab单独添加5个独立的UINavigationController。
4:现在分别添加五个不同的UIViewController到UINavigationController中。
5:立即创建自定义选项卡栏:
5.1:创建自定义Tabbar的方法之一是采用Tabbar高度的UIView并将UIButtons作为Tab添加到Tabbar。
6:将自定义 tabBar 添加到 MainWindow 上。在自定义选项卡栏上选择各种按钮时,更改应用程序 UITabbarController 的 setSelectedIndex。
| 归档时间: |
|
| 查看次数: |
12893 次 |
| 最近记录: |