首页 > 代码库 > iOS开发项目-02添加子控制器以及项目分层

iOS开发项目-02添加子控制器以及项目分层

iOS开发项目-02添加子控制器以及项目分层

一、添加子控制器

1.设置根控制器(自定义)

说明:分析新浪微博应用,观察其整体建构层次。而系统的控制器不能满足项目开发的需求,这里把项目中原有的控制器删除.
自己定义一个TabBarViewController类。让这个类作为window窗口的根控制器。

YYAppDelegate.m文件代码:

 1 #import "YYAppDelegate.h" 2 #import "YYTabBarViewController.h" 3  4 @implementation YYAppDelegate 5  6 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 7 { 8   9    //1.创建窗口10     self.window=[[UIWindow alloc]init];11     self.window.frame=[UIScreen mainScreen].bounds;12     13     //2.设置窗口的根控制器14 //    UITabBarController *tabbarVc =[[UITabBarController alloc]init];15 //    self.window.rootViewController=tabbarVc;16     self.window.rootViewController=[[YYTabBarViewController alloc]init];17     18     //3.显示窗口19     [self.window makeKeyAndVisible];20     return YES;21 }22         

2.新建四个自定义的控制器

说明:根据功能模块划分,把该项目划分为四个大的部分,分别是首页、消息、发现和“我”,根据项目需要,自定义四个子控制器,对这四个模块分别进行管理。

自定义四个控制器,让其继承自UITableViewController

在中控制器 (YYTabBarViewController)中,添加四个子控制器

3.拷贝需要的图片素材到项目中

建议:在拷贝图片的时候,建议使用硬盘对硬盘的拷贝,即在finder中进行。

4.修改系统插件

在项目中,经常会使用到分类(如本项目中使用了一个自己定义UIImage的匪类),但是使用这种分类的方法时,我们安装的只能提示插件可能并不会有智能提示,那么这种情况下可以尝试修改插件。

(1)找到插件在XCode中的安装路径

提示:Xcode的插件安装路径: /Users/用户名/Library/Application Support/Developer/Shared/Xcode/Plug-ins

(2)显示包内容

(3)修改plist文件

二、实现代码

YYTabBarViewController.m文件

 1 // 2 //  YYTabBarViewController.m 3 //  02-微博添加子控制器和设置项目结构 4 // 5 //  Created by apple on 14-7-3. 6 //  Copyright (c) 2014年 itcase. All rights reserved. 7 // 8  9 #import "YYTabBarViewController.h"10 #import "YYHomeTableViewController.h"11 #import "YYDiscoverViewController.h"12 #import "YYMessageViewController.h"13 #import "YYProfileViewController.h"14 #import "UIImage+Extension.h"15 16 @interface YYTabBarViewController ()17 18 @end19 20 @implementation YYTabBarViewController21 22 23 - (void)viewDidLoad24 {25     [super viewDidLoad];26     //添加四个子控制器27     YYHomeTableViewController *home=[[YYHomeTableViewController alloc]init];28     [self addOneChildVc:home title:@"首页" imageName:@"tabbar_home" selectedImageName:@"tabbar_home_selected"];29     30     31     YYMessageViewController *message=[[YYMessageViewController alloc]init];32     [self addOneChildVc:message title:@"消息" imageName:@"tabbar_message_center" selectedImageName:@"tabbar_message_center_selected"];33     34     YYDiscoverViewController *discover=[[YYDiscoverViewController alloc]init];35     [self addOneChildVc:discover title:@"发现" imageName:@"tabbar_discover" selectedImageName:@"tabbar_discover_selected"];36     37     YYProfileViewController *profile=[[YYProfileViewController alloc]init];38     [self addOneChildVc:profile title:@"" imageName:@"tabbar_profile" selectedImageName:@"tabbar_profile_selected"];39 }40 41 /**42  *  添加一个子控制器43  *44  *  @param childVC           子控制对象45  *  @param title             标题46  *  @param imageName         图标47  *  @param selectedImageName 选中时的图标48  */49 -(void)addOneChildVc:(UIViewController *)childVc title:(NSString *)title imageName:(NSString *)imageName selectedImageName:(NSString *)selectedImageName50 {51     //随机设置子控制器的背景颜色52     childVc.view.backgroundColor=YYRandomColor;53     //设置标题54     childVc.tabBarItem.title=title;55     //设置图标56     childVc.tabBarItem.image=[UIImage imageWithName:imageName];57     //设置选中时的图标58     UIImage *selectedImage=[UIImage imageWithName:selectedImageName];59     60     61     if (iOS7) {62         // 声明这张图片用原图(别渲染)63         selectedImage = [selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];64     }65     childVc.tabBarItem.selectedImage = selectedImage;66     67     68     //添加子控制器到tabbar69     [self addChildViewController:childVc];70 }71 72 73 // 在iOS7中, 会对selectedImage的图片进行再次渲染为蓝色74 // 要想显示原图, 就必须得告诉它: 不要渲染75 76 // Xcode的插件安装路径: /Users/用户名/Library/Application Support/Developer/Shared/Xcode/Plug-ins77 @end

UIImage分类

UIImage+Extension.h文件

 1 // 2 //  UIImage+Extension.h 3 //   4 // 5 //  Created by apple on 14-7-3. 6 //  Copyright (c) 2014年 heima. All rights reserved. 7 // 8  9 #import <UIKit/UIKit.h>10 11 @interface UIImage (Extension)12 + (UIImage *)imageWithName:(NSString *)name;13 @end

UIImage+Extension.m文件

 1 // 2 //  UIImage+Extension.m 3 //   4 // 5 //  Created by apple on 14-7-3. 6 //  Copyright (c) 2014年 heima. All rights reserved. 7 // 8  9 #import "UIImage+Extension.h"10 11 @implementation UIImage (Extension)12 + (UIImage *)imageWithName:(NSString *)name13 {14     UIImage *image = nil;15     if (iOS7) { // 处理iOS7的情况16         NSString *newName = [name stringByAppendingString:@"_os7"];17         image = [UIImage imageNamed:newName];18     }19     20     if (image == nil) {21         image = [UIImage imageNamed:name];22     }23     return image;24 }25 @end

在配置文件中的宏定义

 1 // 2 //  Prefix header 3 // 4 //  The contents of this file are implicitly included at the beginning of every source file. 5 // 6  7 #import <Availability.h> 8  9 #ifndef __IPHONE_5_010 #warning "This project uses features only available in iOS SDK 5.0 and later."11 #endif12 13 #ifdef __OBJC__14     #import <UIKit/UIKit.h>15     #import <Foundation/Foundation.h>16 17 // 随机色18 #define YYRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]19 20 // 是否为iOS721 #define iOS7 ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0)22 #endif

运行情况:

       

三、规划项目文件结构

该项目的开发以模块进行划分,文件结构如下:

提示:在进行结构划分的时候,可以在项目中新建分组,分组完成后,把相应的文件拖到对应的组中,但分组是虚拟文件夹,通过查看代码的文件可以发现,在硬盘上实质上是没有分文件夹的。

建议:直接在硬盘中进行分组,以解决这个问题。