[10分钟教你]创建一个iOS项目框架

联系方式:401518215@qq.com

相信大家都有过类似的过程:想自己已经是看过《iOS开发基础》,《Oc开发教程》等iOS入门开发书籍的新兵了,已经熟悉在iOS开发中需要学习的基础知识,现在想要正式开始开发一款App,我要怎么做呢?ok,在接下来的10分钟里,我将开始教大家如何创建一个有相对技术含量的iOS项目框架,适用于一般的Tabbar(多选项卡)的项目开发。

话不多说,我们先来创建一个新的工程。创建完成后我们要做一些处理:
1,删除viewController.h/.m;
2,删除MainStoryboard;
3,在项目工程通用设置里把MainInterface 设置为空。
2EA5FEE4-4A66-4D43-AFD8-F9680CFC90D1.png

其实现在我们的工程就可以运行了,当然现在是没有窗口的(黑漆漆),我们刚才的那些操作也是为了把Xcode新建项目多余的东西删除掉。有人可能要问:为什么把MainStoryboard也删除掉呢?前面我说了,我想要的是创建一个相对有技术含量的项目,你当然可以保留 MainStoryboard,然后在里面创建一个TabbarControler,但是我为了我的需要,不准备用Storyboard来作为程序的入口,所以我把它删除了。

然后我们来创建一些文件夹,有助于我们项目的管理:
1,Resources(保存资源文件)
2,Config(保存通用,全局文件)
3,Tools(保存自己编写的,第三方的工具,轮子)
4,NetRequest(网络请求处理类)
5,Classes(我们程序主要逻辑文件)
6,Others(一些另类文件)
这是我们的项目目录大概是酱紫的:
B97A7E33-CB32-4A29-AF5C-9630E52974C2.png

接下来我们就需要做一些项目开发需要考虑的处理。首先,在我们进入我们程序的第一个界面时,我们其实是需要做一些后台处理的,比如是否第一次登陆,是否需要获取本地数据等等,这些我们现在就需要考虑到,所以我们的程序应该留下这些操作的接口,以便我们日后处理。

(1)我们在Classes目录下再创建两个文件夹InitProcess(程序启动处理)和Frame(tabbar界面入口)。在新建的两个文件夹内新建两个类,InitProcess是NSObject类,Frame暂时创建一个UIViewController类。

在InitProcess类里面做我们程序启动的处理:
#import <UIKit/UIKit.h>
#import "CHMainFrame.h"

@interface CHInitProcess : NSObject

@property (nonatomic,strong)UIApplication *application;
@property (nonatomic,strong)NSDictionary *launchOptions;

//主框架界面
@property (nonatomic,strong)CHMainFrame *chMainFrame;

//启动
-(BOOL)startupProcessWithApplication:(UIApplication*)application andOptions:(NSDictionary*)launchOptions;

@end
#import "CHInitProcess.h"

@implementation CHInitProcess

-(instancetype)init
{
    if (self = [super init]) {
        [self addObserver];
    }
    return self;
}

-(BOOL)startupProcessWithApplication:(UIApplication *)application andOptions:(NSDictionary *)launchOptions
{
    self.application = application;
    self.launchOptions = launchOptions;
    
    //如果程序窗口为nil,初始化为当前屏幕大小
    if (!application.delegate.window) {
        application.delegate.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    }
    
    //进入主框架界面
    _chMainFrame = [[CHMainFrame alloc]init];
    application.delegate.window.rootViewController = _chMainFrame;
    
    [application.delegate.window makeKeyAndVisible];
    
    return YES;
}

//启动前广播消息
-(void)addObserver
{
    //添加需要的消息
}

@end
为了证明我们的程序的确能进入Frame类里面,我们随便在Frame类里面写一些代码
@implementation CHMainFrame

-(void)viewDidLoad
{
    self.view.backgroundColor = [UIColor redColor];
}

@end
这时候我们的项目大概是酱紫的:
1A94F3B6-FAE8-4872-A97B-F86243190D23.png
处理写好了,那么我们怎么让我们的程序知道要运行呢?Appdelegate.h/.m里面是我们程序的入口,我们在里面写些东西:
#import "AppDelegate.h"
#import "CHInitProcess.h"

@interface AppDelegate ()

@property (nonatomic,strong) CHInitProcess* chInitProcess;

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    //程序入口
    _chInitProcess = [[CHInitProcess alloc]init];
    return [_chInitProcess startupProcessWithApplication:application andOptions:launchOptions];
    
}

- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}

- (void)applicationDidEnterBackground:(UIApplication *)application {
    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}

- (void)applicationWillEnterForeground:(UIApplication *)application {
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}

- (void)applicationWillTerminate:(UIApplication *)application {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

@end

ok,这样我们项目的大概框架就出来了。运行一下,我们可以看到满屏的红色。

那么接下来我们就需要开始做一个tabBarController的类了。这里推荐一位前辈造的轮子CYLTabBarController,大家可以百度或者在github上搜索到。使用的方法很简单,直接导入工程或者使用cocoapod都可以。推荐大家学习一下cocoapod,对每个从事iOS开发的人来说都是必须的。

我们现在的想法就是用一个tabBarController类代替我们刚才的UIViewController,也就是Frame目录下的类。至于CYLTabBarController如何使用,推荐大家到Github上项目的主页或者源码学习,这里也不细讲。

笔者最后的在InitProcess文件里面把接口代码改成:
//进入主框架界面
    if (!_chMainTabBarController) {
        _chMainTabBarController = [[CHTabBarControllerConfig alloc]init];
    }
    application.delegate.window.rootViewController = _chMainTabBarController.tabBarController;

这样我们的程序也大功告成了。

联系方式:401518215@qq.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容