关于iOS中的第二种架构,理解起来稍微有点难,它同样解决在程序开始时需要考虑的三种情况,主要代码实现如下:
第一步,仍是使用[NSUserDefaults standardUserDefaults]向磁盘中写入登录状态
#import "QYAppDelegate.h" #import "QYMainController.h" @implementation QYAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if (![[NSUserDefaults standardUserDefaults] boolForKey:@"everLaunched"]) { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"everLaunched"]; [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstLaunch"]; } else{ [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"]; } [[NSUserDefaults standardUserDefaults] synchronize]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; if ([[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]) { [QYMainController showQYViewController:kQYViewControllerUserGuide]; }else { if ([[NSUserDefaults standardUserDefaults] boolForKey:@"remberPwd"]) { [QYMainController showQYViewController:kQYViewControllerHome]; }else { [QYMainController showQYViewController:kQYViewControllerLogin]; } } [self.window makeKeyAndVisible]; return YES; }
其中的mainController是实现切换所实现的 NSObject 类别扩展,mainController的实现如下:.h文件的实现
#import <Foundation/Foundation.h> //枚举变量,viewController的方式 typedef enum{ kQYViewControllerUserGuide, kQYViewControllerHome, kQYViewControllerLogin }QYViewControllerType; @interface QYMainController : NSObject //之所以不使用对象方法, 是因为这个类的主要目的是管理其它界面,跳转, 基本上没有属性值 //所以做成了类方法 + (void)showQYViewController:(QYViewControllerType)type; @end
对于界面的切换实现如下:</pre></p><p><span style="font-size:18px;">.m文件的实现</span></p><p><span style="font-size:18px;"></span><pre name="code" class="objc">#import "QYMainController.h" #import "QYHomeViewController.h" #import "QYLoginViewController.h" #import "QYUserGuideViewController.h" @interface QYMainController() @end @implementation QYMainController + (void)showQYViewController:(QYViewControllerType)type { // 创建当前显示的ViewCOntroller UIViewController *currentShowViewController = [[[self alloc] init] controllerWithType:type]; // 这里的self 指的是QYMainController这个类对象,而不是实例对象 UIWindow *window = [[[UIApplication sharedApplication] delegate] window]; window.rootViewController = currentShowViewController; [window makeKeyAndVisible]; } //以不同的type来初始化resultViewController - (UIViewController*)controllerWithType:(QYViewControllerType)type { UIViewController *resultViewController = nil; switch (type) { case kQYViewControllerHome: resultViewController = [self homeViewController]; break; case kQYViewControllerLogin: resultViewController = [self loginViewController]; break; case kQYViewControllerUserGuide: resultViewController = [self userGuideViewController]; break; default: break; } return resultViewController; } //对于不同viewController的初始化的实现方法 - (QYHomeViewController*)homeViewController { QYHomeViewController *homeVCTrl = [[QYHomeViewController alloc] init]; return homeVCTrl; } - (QYUserGuideViewController*)userGuideViewController { QYUserGuideViewController *userGuideVCtrl = [[QYUserGuideViewController alloc] init]; return userGuideVCtrl; } - (QYLoginViewController*)loginViewController { QYLoginViewController *loginVCtrl = [[QYLoginViewController alloc] init]; return loginVCtrl; } @end
.h文件实现
.m文件实现#import <UIKit/UIKit.h> @interface QYHomeViewController : UITabBarController @end
#import "QYHomeViewController.h" #import "QYChatTableViewController.h" #import "QYContactTableViewController.h" #import "QYFindViewController.h" #import "QYAboutMeViewController.h" @interface QYHomeViewController () @end @implementation QYHomeViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // 切换界面的实现 QYChatTableViewController *chatViewController = [[QYChatTableViewController alloc] initWithStyle:UITableViewStylePlain]; UINavigationController *navChat = [[UINavigationController alloc] initWithRootViewController:chatViewController]; QYContactTableViewController *contactViewController = [[QYContactTableViewController alloc] initWithStyle:UITableViewStylePlain]; UINavigationController *navContact = [[UINavigationController alloc] initWithRootViewController:contactViewController]; QYFindViewController *findViewController = [[QYFindViewController alloc] initWithStyle:UITableViewStylePlain]; UINavigationController *navFind = [[UINavigationController alloc] initWithRootViewController:findViewController]; QYAboutMeViewController *aboutViewController = [[QYAboutMeViewController alloc] initWithStyle:UITableViewStylePlain]; UINavigationController *navAboutMe = [[UINavigationController alloc] initWithRootViewController:aboutViewController]; self.viewControllers =@[navChat,navContact,navFind ,navAboutMe]; }
上述就是第二种项目架构的是实现,对于mainViewController的创建不是很好理解,需要注意。
iOS开发中常用的两种架构(2)
最新推荐文章于 2022-06-27 00:00:00 发布