文档章节

UI_12 ModalViewController(模态),单例设计模式

黑伞将军
 黑伞将军
发布于 2015/08/30 23:06
字数 794
阅读 283
收藏 2

⼀、模态viewController

1、介绍

     程序中切换⻚⾯,可以使⽤UINavigationController。通过导航功能实现⻚⾯切换。使用    pushViewController:animated:该方法显示的视图具有层级关系;而使用模态视图控制器presentViewController:animated:completion显示的视图与之前的视图控制器平级(或者说是两个不相干的层级)。

使用场景

     临时展⽰⼀些内容。例如:程序中⽤户登录,通讯录中添加联系⼈等等。

     UIImagePickerController。调⽤系统相册、照相机。

     

2、方法

     显示:

  • presentViewController:animated:completion: 

     弹出:

  • dismissViewControllerAnimated:completion: 

     弹出的两种实现⽅式,在模态controller中使⽤:

  • [self dismissViewControllerAnimated:YES completion:nil];

  • [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

     使⽤self调⽤⽅法,系统会使⽤self.presentingViewController调⽤这个⽅

法。

3、属性

  • modalPresentationStyle 模态controller显⽰样式

  • modalTransitionStyle 模态显⽰动画样式



⼆、单例

     在一个应用程序中,可能会有一些信息在程序运行期间一直存在,比如:登录信息、通讯录中的联系人信息等,单例为此类信息的访问提供了便捷。

1、单例的特性

  • 在内存中只有一个对象,节省空间

  • 单例对象存储在堆区,操作单例对象的变量存储在静态区,程序关闭后由系统⾃动回收

  • 可全局访问

  • 避免频繁的创建销毁对象,可以提⾼性能

  • 生命周期与应用程序相同

  • 降低模块之间的耦合度,降低代码的复杂度。

2、单例初始化方法

     规范写法:

  • standardxxx

  • onlyxxx

  • defaultxxx

  • sharedxxx



三、综合使用

     新建RootViewController:UIViewController作为NavigationController的rootViewController。再将NavigationController添加为window的rootViewController。设置RootViewController的leftBar和rightBar分别以模态视图控制器和普通视图控制器的方式推出ModalViewController和FirstViewController。

     在ModalViewController中初始化单例DataHandle,在FirstViewController中显示单例内容。

代码如下:

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    RootViewController *rootVC = [[RootViewController alloc] init]; 

    UINavigationController *NC = [[UINavigationController alloc] initWithRootViewController:rootVC];

    self.window.rootViewController = NC;

    self.window.backgroundColor = [UIColor whiteColor];
    [
self.window makeKeyAndVisible];
   
return YES;

}

单例

DataHandle.h

@interface DataHandle : NSObject

@property(nonatomic, retain) NSString *text;

+ (DataHandle *)shareInstance;

@end


DataHandle.m

@implementation DataHandle
static DataHandle *handle = nil;
+ (
DataHandle *)shareInstance
{
   
//同步锁(为了避免多个线程同时访问同一个资源,导致资源不统一)
   
@synchronized (self){
       
if (!handle) {
           
handle = [[DataHandle alloc] init];
        }

    }   

    return handle;

}

@end

模态

ModalViewController.m

@interface ModalViewController ()
@property(nonatomic, retain) UITextField *textField;
@end

@implementation ModalViewController

- (
void)dealloc
{
    [
_textField release];
    [
super dealloc];
}

- (
void)viewDidLoad {
    [
super viewDidLoad];
   
self.view.backgroundColor = [UIColor magentaColor];
   
   
self.textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 100, 150, 30)];
   
_textField.borderStyle = UITextBorderStyleRoundedRect;
   
    [
self.view addSubview:_textField];

    [_textField release]; 

    [self createBarButtonItems];

}


- (
void)createBarButtonItems
{
   
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Dismiss" style:UIBarButtonItemStylePlain target:self action:@selector(didClickLeftBI:)];
}

- (
void)didClickLeftBI:(UIBarButtonItem *)BI
{
   
//模态返回
    [
self dismissViewControllerAnimated:YES completion:^{
       
NSLog(@"模态返回");
    }];
   
//获取单例对象
   
DataHandle *handle = [DataHandle shareInstance];
   
   
//为单例对象赋值
    handle.
text = _textField.text;
   
}

@end

RootViewController.m

@implementation RootViewController

- (
void)viewDidLoad {
    [
super viewDidLoad];
   
   
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Modal" style:UIBarButtonItemStylePlain target:self action:@selector(toModalViewController:)];
   
   
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"PUSH" style:UIBarButtonItemStylePlain target:self action:@selector(toNextView:)];
   
   
self.title = @"RootVC";
   
   
self.view.backgroundColor = [UIColor blueColor];
   
   
// Do any additional setup after loading the view.
}

- (
void)toModalViewController:(UIBarButtonItem *)BI
{
   
   
ModalViewController *modalVC = [[ModalViewController alloc] init];
   
//模态推出modalVC,推出的modalVCnavigationController平级
   
//设置modalTransition
    modalVC.
modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
   
   
//modalVC添加navigationController
   
UINavigationController *NC = [[UINavigationController alloc] initWithRootViewController:modalVC];
   
    [
self presentViewController:NC animated:YES completion:^{

        NSLog(@"模态推出");

    }];

    

    [modalVC release];
   
NSLog(@"feqr");
}

- (
void)toNextView:(UIBarButtonItem *)BI
{

    FirstViewController *firstVC = [[FirstViewController alloc] init];

    

    [self.navigationController pushViewController:firstVC animated:YES];

}

@end

FirstViewController.m

- (void)viewDidLoad {
    [
super viewDidLoad];
   
   
//获取单例对象
   
DataHandle *dataHandle = [DataHandle shareInstance];
   
self.title = dataHandle.text;
   
   
self.view.backgroundColor = [UIColor redColor];
   
// Do any additional setup after loading the view.

}


© 著作权归作者所有

黑伞将军
粉丝 1
博文 33
码字总数 34553
作品 0
张家口
程序员
私信 提问
Java程序员从笨鸟到菜鸟之(三十三)大话设计模式(三)单例模式

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188 单例模式属于对象创建型模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点。对一些类来说...

长平狐
2012/11/12
176
0
23种设计模式(1):单例模式

定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 类型:创建类模式 类图: 类图知识点: 1.类图分为三部分,依次是类名、属性、方法 2.以<<开头和以>>结尾的为注释...

LCZ777
2014/07/05
305
0
设计模式1——Singleton设计模式

Singleton单例模式是最简单的设计模式,它的主要作用是保证在程序运行生命周期中,使用了单例模式的类只能有一个实例对象存在。单例模式实现了类似C语言中全局变量的功能,单例模式常用于注册...

小米米儿小
2013/12/05
193
1
【23种设计模式之一】单例设计模式(翻译)

引言: 这一系列文章,翻译自网络上的文章,不过中间会夹杂着个人的理解,非原创,不过中文应该算是原创。 下面介绍,使用设计模式的一些好处: 1、设计模式是已经在工业生产中使用的,用于解...

敲代码猥琐男
2015/01/13
648
2
为什么java中用枚举实现单例模式会更好

枚举单例是java中使用枚举提供一个实例对象来实现单例模式的一种新方法,虽然单例模式在java中早已存在,但枚举单例实际上从java5引入枚举作为它的关键特性之后相对来说还是一个新的概念,这...

zhoujy
2013/06/01
8.9K
1

没有更多内容

加载失败,请刷新页面

加载更多

2020,向死而生

或许2020年注定是非常艰难的一年,毕竟两个轮回前之的1900年,清廷过得也很艰难,义和团在北方闹得轰轰烈烈,紫禁城也被八国联军占领。次年(1901年)即签订了后世所谓的丧权辱国的辛丑条约,...

嘉树
7分钟前
0
0
git 常用配置

git config --global core.compression 0 git config --global http.lowSpeedLimit 0 git config --global http.lowSpeedTime 999999 git config --global http.postBuffer 524288000......

老码农008
8分钟前
2
0
Protel99SE WIN10系统下无法添加封装库的解决方法

Protel99SE WIN10系统下无法添加封装库的解决方法 Protel99SE这款PCB设计软件实在太古老了,导致与微软的最新操作系统有些功能不能兼容,比如WIN10系统下无法添加封装库;但是由于Protel99S...

demyar
9分钟前
1
0
大数据风控系统概述

为什么要做风控系统 不做的话,会有以下风险: 各种小号、垃圾账号泛滥 撞库攻击、盗号、毁号、拖库等 拉新 10w 留存率不到 5% 百万营销费用,却增加不了用户粘性 投票票数差距非常悬殊 各种...

大数据技术进阶
10分钟前
3
0
串口调试助手,VB6.0开发

1、为什么要自己开发一个串口调试助手 通常我们都是:在网上直接下载一个串口助手,可执行文件,直接使用,并无法得到其源码,在此我们提供了一个VB6.0开发的串口助手: (1)让你极速掌握串...

superman150
13分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部