主流的方式搭建一个App框架
先看效果图
UITabBarController实现底部按钮
本文章的内容为:学会搭建类似于QQ界面框架
第一步:设置窗口的主视图,在AppDelegate.m中didFinishLaunchingWithOptions:方法中将TabBarViewController的对象作为窗口主视图。(TabBarViewController是自己创建的一个类,同时继承UITabBarController)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//创建窗口,并初始化
_window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
//创建一个TabBarViewController对象
TabBarViewController * tabBar = [[TabBarViewController alloc]init];
//将TabBarViewController对象作为窗口的根控制器
_window.rootViewController = tabBar;
//显示窗口
[_window makeKeyAndVisible];
return YES;
}
第二步:创建对应的控制器(UIViewController)
下图是我的文件结构目录
动态、联系人、消息文件就是对应的ViewController
✨✨核心部分✨✨
当前搭建底部导航栏的主流方式
在TabBarViewController.m中
1.先导入头文件
#import "TabBarViewController.h"
#import "MessageViewController.h"
#import "ContactViewController.h"
#import "DynamicViewController.h"
2.以下是对应代码以及参数的释义
//创建一个视图对象
MessageViewController * messageView = [[MessageViewController alloc]init];
/**
* UITabBarItem类实现一个项目在UITabBar对象.
* 也就是说UITabBar上的多个按钮其实就是UITabBarItem
*
* Title: tabBar上item的标题
* image: tabBar上item普通状态下的图片
* selectedImage: tabBar上item选中状态下的图片
* imageWithRenderingMode: item的图片始终绘制为原始状态
*/
UITabBarItem * messageItem = [[UITabBarItem alloc]initWithTitle:@"消息" image:[UIImage imageNamed:@"message"] selectedImage:[[UIImage imageNamed:@"message_press"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
//将设置好的item赋值给视图上的tabBarItem
messageView.tabBarItem = messageItem;
//创建一个导航栏对象,将视图对象作为导航栏的根控制器
UINavigationController * navMessage = [[UINavigationController alloc]initWithRootViewController:messageView];
//设置视图的导航栏标题
messageView.navigationItem.title = @"消息";
//将导航栏对象作为子视图添加到TabBarController上
[self addChildViewController:navMessage];
//其他同理
拓展:也许懂得人会看得出,这样写代码的耦合性(代码重复性)很高,上面的代码是可以封装的,封装全文代码如下:
#import "TabBarViewController.h"
#import "MessageViewController.h"
#import "ContactViewController.h"
#import "DynamicViewController.h"
@interface TabBarViewController ()
@end
@implementation TabBarViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setAllChildView];
}
-(void)setAllChildView
{
//创建一个消息视图对象
MessageViewController * messageView = [[MessageViewController alloc]init];
[self addChildViewController:messageView tabBarItemTitle:@"消息" itemImgName:@"message" itemSelectedImgName:@"message_press"];
//创建一个联系人视图对象
ContactViewController * contactView = [[ContactViewController alloc]init];
[self addChildViewController:contactView tabBarItemTitle:@"联系人" itemImgName:@"contact" itemSelectedImgName:@"contact_press"];
//创建一个动态视图对象
DynamicViewController * dynamicView = [[DynamicViewController alloc]init];
[self addChildViewController:dynamicView tabBarItemTitle:@"动态" itemImgName:@"dynamic" itemSelectedImgName:@"dynamic_press"];
}
-(void)addChildViewController:(UIViewController *)viewController tabBarItemTitle:(NSString *)title itemImgName:(NSString *)itemImgName itemSelectedImgName:(NSString *)itemSelectedImgName{
/**
* UITabBarItem类实现一个项目在UITabBar对象.
* 也就是说UITabBar上的按钮其实就是多个UITabBarItem对象组成的
*
* Title: tabBar上item的标题
* image: tabBar上item普通状态下的图片
* selectedImage: tabBar上item选中状态下的图片
* imageWithRenderingMode: item的图片始终绘制为原始状态
*/
UITabBarItem * messageItem = [[UITabBarItem alloc]initWithTitle:title image:[UIImage imageNamed:itemImgName] selectedImage:[[UIImage imageNamed:itemSelectedImgName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
//将设置好的item赋值给视图上的tabBarItem
viewController.tabBarItem = messageItem;
//创建一个导航栏对象,将视图对象作为导航栏的根控制器
UINavigationController * navMessage = [[UINavigationController alloc]initWithRootViewController:viewController];
//设置视图的导航栏标题
viewController.navigationItem.title = title;
//将导航栏对象作为子视图添加到TabBarController上
[self addChildViewController:navMessage];
}