iOS开发中常用的两种架构(2)

关于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文件实现

#import <UIKit/UIKit.h>

@interface QYHomeViewController : UITabBarController

@end

.m文件实现

#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的创建不是很好理解,需要注意。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值