文章标题

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的基础框架大致就写好了,(没有导航)
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值