联系方式:401518215@qq.com
相信大家都有过类似的过程:想自己已经是看过《iOS开发基础》,《Oc开发教程》等iOS入门开发书籍的新兵了,已经熟悉在iOS开发中需要学习的基础知识,现在想要正式开始开发一款App,我要怎么做呢?ok,在接下来的10分钟里,我将开始教大家如何创建一个有相对技术含量的iOS项目框架,适用于一般的Tabbar(多选项卡)的项目开发。
话不多说,我们先来创建一个新的工程。创建完成后我们要做一些处理:
1,删除viewController.h/.m;
2,删除MainStoryboard;
3,在项目工程通用设置里把MainInterface 设置为空。
其实现在我们的工程就可以运行了,当然现在是没有窗口的(黑漆漆),我们刚才的那些操作也是为了把Xcode新建项目多余的东西删除掉。有人可能要问:为什么把MainStoryboard也删除掉呢?前面我说了,我想要的是创建一个相对有技术含量的项目,你当然可以保留 MainStoryboard,然后在里面创建一个TabbarControler,但是我为了我的需要,不准备用Storyboard来作为程序的入口,所以我把它删除了。
然后我们来创建一些文件夹,有助于我们项目的管理:
1,Resources(保存资源文件)
2,Config(保存通用,全局文件)
3,Tools(保存自己编写的,第三方的工具,轮子)
4,NetRequest(网络请求处理类)
5,Classes(我们程序主要逻辑文件)
6,Others(一些另类文件)
这是我们的项目目录大概是酱紫的:
接下来我们就需要做一些项目开发需要考虑的处理。首先,在我们进入我们程序的第一个界面时,我们其实是需要做一些后台处理的,比如是否第一次登陆,是否需要获取本地数据等等,这些我们现在就需要考虑到,所以我们的程序应该留下这些操作的接口,以便我们日后处理。
(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
这时候我们的项目大概是酱紫的:
处理写好了,那么我们怎么让我们的程序知道要运行呢?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