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 @end
19
20 @implementation YYTabBarViewController
21
22
23 - (void)viewDidLoad
24 {
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 *)selectedImageName
50 {
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     //添加子控制器到tabbar
69     [self addChildViewController:childVc];
70 }
71
72
73 // 在iOS7中, 会对selectedImage的图片进行再次渲染为蓝色
74 // 要想显示原图, 就必须得告诉它: 不要渲染
75
76 // Xcode的插件安装路径: /Users/用户名/Library/Application Support/Developer/Shared/Xcode/Plug-ins
77 @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 *)name
13 {
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_0
10 #warning "This project uses features only available in iOS SDK 5.0 and later."
11 #endif
12
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 // 是否为iOS7
21 #define iOS7 ([[UIDevice currentDevice].systemVersion doubleValue] >= 7.0)
22 #endif

运行情况:

       

三、规划项目文件结构

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

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

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

iOS开发项目-02添加子控制器以及项目分层,布布扣,bubuko.com

时间: 2024-10-05 04:44:07

iOS开发项目-02添加子控制器以及项目分层的相关文章

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

iOS开发项目篇—02添加子控制器以及项目分层 一.添加子控制器 1.设置根控制器(自定义) 说明:分析新浪微博应用,观察其整体建构层次.而系统的控制器不能满足项目开发的需求,这里把项目中原有的控制器删除. 自己定义一个TabBarViewController类.让这个类作为window窗口的根控制器. YYAppDelegate.m文件代码: 1 #import "YYAppDelegate.h" 2 #import "YYTabBarViewController.h&qu

文顶顶iOS开发博客链接整理及部分项目源代码下载

文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程却很难找.如果你是初学者,在学习了斯坦福iOS7公开课和跟着文顶顶的博客做项目之后,最快只需要2个月时间,就基本可以独立完成iOS App的开发工作.有经验的开发者也可以在该博客中寻找代码片段进行学习借鉴,必有所收获. 在此也向@文顶顶 表示严重感谢! 由于文顶顶博客博文繁多,每次找文章需要频繁的翻页,

02---按钮的设置 控制器拥有导航栏包装一层导航控制器 添加子控制器 UIBarButtonItem导航按钮 设置导航栏UINavigationBar主题 设置状态栏样式

一.按钮的设置 1.设置背景图片 [btn setBackgroundImage:image forState:UIControlStateNormal]; 2.内部UIImageView 1> 设置内部UIImageView的图片 [btn setImage:image forState:UIControlStateNormal]; // 不能写成btn.imageView.image = image; 2> 调整内部图片的内容模式 self.imageView.contentMode =

iOS开发UINavigation系列四——导航控制器UINavigationController

iOS开发UINavigation系列四--导航控制器UINavigationController 一.引言 在前面的博客中,我么你介绍了UINavigationBar,UINavigationItem和UIToolBar,UINavigationController是将这些控件和UIViewController紧密的结合了起来,使用导航,我们的应用程序层次会更加分明,对controller的管理也更加方便.前几篇博客地址如下: UINavigationBar:http://my.oschina

转:ios开发--给应用添加新的字体的方法

1.网上搜索字体文件(后缀名为.ttf,或.odf) 2.把字体库导入到工程的resouce中 3.在程序添加以下代码 输出所有字体 NSArray *familyNames = [UIFont familyNames];      for( NSString *familyName in familyNames ){          printf( "Family: %s \n", [familyName UTF8String] );          NSArray *fontN

iOS开发必读-GitHub 上Top100 的 Objective-C 项目

这篇文章是官方账号在简书推出的文章,感兴趣的请点击下面: 点我看<iOS开发必读-GitHub 上Top100 的 Objective-C 项目> 简单摘录5个项目: 1.AFNetworking 作者是 NSHipster 的博主, iOS 开发界的大神级人物, 毕业于卡内基·梅隆大学, 开源了许多牛逼的项目, 这个便是其中之一, AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务端 API 进行数据交换, 操作简单, 功能强大, 现

【IOS开发笔记02】学生管理系统

端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一大坨出去了,这个时候立刻想到了切入IOS开发!!! 事实上,前端开发做到一定时间,要进步很难了,最近几个月扑到业务上便感觉突破不了目前的瓶颈,自身的前端瓶颈主要在两方面:技术深度.技术广度 其实不论深度或者广度来说都不是简单前端能说清楚的事情,不能说了解了angularJS.react等框架技术深度

IOS开发之视图和视图控制器

视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西.在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多.在UIKit框架中都有一个UIWindow来容纳我们的View.应用程序中几乎全部的可视控件都是UIView以及UIView的子类的实例,并且UIWindow也是UIView的子类.UIWindow可以不借助于父类视图显示在屏幕上,其余的视图都需要添加到父视图中才能显示.窗口是用来显示视图的,下面我们将会结合着实例来具体的

iOS开发 - 第02篇 - UI进阶 - 08 - 私人通讯录

实现:私人通讯录 源代码下载地址: 点击打开链接 1.实现要求 1> 多个控制器之间的跳转 2> 控制器之间的数据传递 3> 数据存储 2.登录界面到联系人列表界面实现思路 2.1 登录界面搭建 1> 在Storyboard中添加导航控制器,设置根控制器,并设置导航条的title 2> 搭建登录界面 注1:设置UITextField占位符和清楚文字按钮 注2:设置密码UITextField的暗文 注3:记住密码UILabel和开关以及自动登录UILabel和开关分别放在一个U