iOS学习笔记-微博项目1,创建基础架构
菜鸟一枚纪录自己学iOS的点滴,写博客理一下自己的思路
1.新建一个ios项目,在AppDelegate.m里面设置根控制器
基础代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//4程序启动完显示头部状态栏
application.statusBarHidden = NO;
//1创建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//2设置根控制器
UITabBarController *tabBarVc = [[UITabBarController alloc] init];
self.window.rootViewController = tabBarVc;
//添加四个子控制器
UIViewController *home = [[UIViewController alloc] init];
home.view.backgroundColor = [UIColor yellowColor];
[tabBarVc addChildViewController:home];
UIViewController *message = [[UIViewController alloc] init];
message.view.backgroundColor = [UIColor redColor];
[tabBarVc addChildViewController:message];
UIViewController *discover = [[UIViewController alloc] init];
discover.view.backgroundColor = [UIColor blueColor];
[tabBarVc addChildViewController:discover];
UIViewController *me = [[UIViewController alloc] init];
me.view.backgroundColor = [UIColor orangeColor];
[tabBarVc addChildViewController:me];
//3显示窗口 让窗口称为主窗口
[self.window makeKeyAndVisible];
return YES;
}
代理里面就只做代理的事 tabBarController里有多少个控制器没必要让代理知道,要遵循自己的事自己做
所以要把子控制器创建过程封装起来,把AppDelegate.m里添加子控制器的代码删除,自定义一个tabBarController继承UITabBarController,把代码放进去
2.创建了一个名为ZHTabBarViewController的控制器把代码放入ZHTabBarViewController.m的- (void)viewDidLoad方法中这时的tabBarVc应该换成self
- (void)viewDidLoad {
[super viewDidLoad];
//添加子控制器
UIViewController *home = [[UIViewController alloc]init];
home.view.backgroundColor = [UIColor yellowColor];
[self addChildViewController:home];
UIViewController *message = [[UIViewController alloc] init];
message.view.backgroundColor = [UIColor blueColor];
[self addChildViewController:message];
UIViewController *discover = [[UIViewController alloc] init];
discover.view.backgroundColor = [UIColor grayColor];
[self addChildViewController:discover];
UIViewController *me = [[UIViewController alloc] init];
me.view.backgroundColor = [UIColor orangeColor];
[self addChildViewController:me];
}
@end
3 在AppDelegate.m文件中导入ZHTabBarViewController.h
把控制器名字改成我们自定义的控制器名字这样我们自定义的tabBarController无论设置多少个控制器,代理都不会受到影响
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//4程序启动完显示头部状态栏
application.statusBarHidden = NO;
//1创建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//2设置根控制器
/*
ZHTabBarViewController *tabBarVc = [[ZHTabBarViewController alloc] init];
self.window.rootViewController = tabBarVc;
*/
还可以这样写
self.window.rootViewController = [[ZHTabBarViewController alloc] init];
//3显示窗口 让窗口称为主窗口
[self.window makeKeyAndVisible];
return YES;
}
.这样设置好后我们就创建了四个控制器但是看起来还是很挫,
4.往我们自定义的TabBarViewController中添加底部文字和图片,这个时候要先导入美工给我们的素材图片
- (void)viewDidLoad {
[super viewDidLoad];
//添加子控制器
UIViewController *home = [[UIViewController alloc]init];
home.view.backgroundColor = [UIColor yellowColor];
//设置tabBarItem的标题
// 底部文字
home.tabBarItem.title = @"首页";
//默认图片
home.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];
//选中时候的图片
home.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_home_selected"];
[self addChildViewController:home];
UIViewController *message = [[UIViewController alloc] init];
message.view.backgroundColor = [UIColor blueColor];
//设置tabBarItem的标题
// 底部文字
message.tabBarItem.title = @"消息";
//默认图片
message.tabBarItem.image = [UIImage imageNamed:@"tabbar_message_center"];
//选中时候的图片
home.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_message_center_selected"];
[self addChildViewController:message];
UIViewController *discover = [[UIViewController alloc] init];
discover.view.backgroundColor = [UIColor grayColor];
/设置tabBarItem的标题
// 底部文字
discover.tabBarItem.title = @"发现";
//默认图片
discover.tabBarItem.image = [UIImage imageNamed:@"tabbar_discover""];
//选中时候的图片
home.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_discover_selected"];
[self addChildViewController:discover];
UIViewController *me = [[UIViewController alloc] init];
me.view.backgroundColor = [UIColor orangeColor];
/设置tabBarItem的标题
// 底部文字
me.tabBarItem.title = @"我";
//默认图片
me.tabBarItem.image = [UIImage imageNamed:@"tabbar_profile"];
//选中时候的图片
home.tabBarItem.selectedImage = [UIImage imageNamed:@"tabbar_profile_selected"];
[self addChildViewController:me];
}
@end
在iOS7中会对selectedImage图片进行再次渲染 所以还会成默认的蓝色 要想显示原图就要告诉他 不要渲染图片 用imageWithRenderingMode:这个方法 mode渲染
只以home为例
UIViewController *home = [[UIViewController alloc]init];
home.view.backgroundColor = [UIColor yellowColor];
//7.设置tabBarItem的标题
home.tabBarItem.title = @"首页";
home.tabBarItem.image = [UIImage imageNamed:@"tabbar_home"];
//选中时候的图片
UIImage *selectedImage = [UIImage imageNamed:@"tabbar_home_selected"];
//不要渲染 original
selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
home.tabBarItem.selectedImage = selectedImage;
[self addChildViewController:home];
5 这样代码太多 我们要重构:把相同的代码放到一个方法 把不同的东西变成参数传进来
我们写一个方法来封装 添加子控制器的过程
//title默认图片和高亮图片 还有控制器都要变 所以这些属性设成参数
- (void)addOnChildVc:(UIViewController *)childVc title:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName
{
//随机背景色
childVc.view.backgroundColor = [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0];
childVc.tabBarItem.image = [UIImage imageNamed:imageName];
childVc.tabBarItem.title = title;
//设置图标
UIImage *selectedImage = [UIImage imageNamed:selectedImageName];
//设置选中图标
//声明这张图片用原图不要渲染
selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
childVc.tabBarItem.selectedImage = selectedImage;
//添加为tabBar的子控制器
[self addChildViewController:childVc];
}
在viewDidLoad里把之前写的代码删除 创建四个继承于UITableViewController的子控制器并导入头文件
直接调用封装好的方法
- (void)viewDidLoad {
[super viewDidLoad];
ZHHomeViewController *home = [[ZHHomeViewController alloc]init];
//这里调用封装的方法
[self addOnChildVc:home title:@"首页" imageName:@"tabbar_home" selectedImageName:@"tabbar_home_selected"];
ZHMessageViewController *message = [[ZHMessageViewController alloc] init];
[self addOnChildVc:message title:@"消息" imageName:@"tabbar_message_center" selectedImageName:@"tabbar_message_center_selected"];
ZHDiscoverViewController *discover = [[ZHDiscoverViewController alloc] init];
[self addOnChildVc:discover title:@"发现" imageName:@"tabbar_discover" selectedImageName:@"tabbar_discover_selected"];
ZHProfileViewController *me = [[ZHProfileViewController alloc] init];
[self addOnChildVc:me title:@"我" imageName:@"tabbar_profile" selectedImageName:@"tabbar_profile_selected"];
}
@end
定义一个判断版本的宏 做版本适配
#define iOS7 ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0)
右键 show in finder把创建的文件按照页面创建文件夹再在里面按照MVC创建文件夹 根控制器我放到了main里面
这样一个app的基础框架大致就写好了,(没有导航)