ios设计模式—kvo观察者模式

哎呀,新的一年过去了祝大家新年快乐

因为在之前的项目中使用观察者模式去解决了一些问题并且效果比较好,比如说键盘收起(这个用的是uiwindow中自带的通知类型),还有就是我年前的项目中一写具体的东西,需要app后台持续定位上传给服务器,并由服务器返回的字段判断是否结束定位,我讲返回的字段传给delegate的一个属性用于记录当前是否需要定位的状态,我选用了kvo进行检测appDelegate中我自定义的一个属性,一旦该属性的属性值变为1,则停止定位,可能这样比较麻烦但是个人认为思路比较清晰,哈哈。代码在最下面哦!

//
//  ViewController.m
//  strategyDemo
//
//  Created by 樊星 on 16/2/8.
//  Copyright © 2016年 樊星. All rights reserved.
//

#import "ViewController.h"
#import "strategyClass.h"

@interface ViewController ()
{
    UITextField * text ;
}
@end

@implementation ViewController
- (void)viewWillAppear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(postBeginMyNotification:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(postBeginMyNotification:) name:UIKeyboardWillHideNotification object:nil];
}
- (void)viewWillDisappear:(BOOL)animated
{
    [[NSNotificationCenter defaultCenter]removeObserver:self name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter]removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    text = [[UITextField alloc]initWithFrame:CGRectMake(0,[UIScreen mainScreen].bounds.size.height-50 , [UIScreen mainScreen].bounds.size.width,30 )];
    [text setBackgroundColor:[UIColor redColor]];
    [self.view addSubview:text];
}
- (void)postBeginMyNotification:(NSNotification*)notification
{
    NSValue* endrect = [notification.userInfo valueForKey:@"UIKeyboardFrameEndUserInfoKey"];
    NSNumber* animationDuaring = [notification.userInfo valueForKey:@"UIKeyboardAnimationDurationUserInfoKey"];
    //动画持续时间
    CGFloat animationDuaringValue = [animationDuaring floatValue];
    //键盘动画结束时键盘的frame
    CGRect endRext = [endrect CGRectValue];
    [UIView animateWithDuration:animationDuaringValue animations:^{
        self.view.frame = CGRectMake(0, endRext.origin.y-[UIScreen mainScreen].bounds.size.height, self.view.frame.size.width, self.view.frame.size.height);
    }];
}

@end
//核心代码如下:- (void)viewDidLoad {
    [super viewDidLoad];
    MyAnnotation = [[BMKPointAnnotation alloc]init];
    if (!locationService) {
        locationService = [[BMKLocationService alloc]init];
        locationService.delegate = self;
    }
    [self startGetSelfLocation];
    [__APPDELEGATE addObserver:self
                   forKeyPath:@"IsShare"
                      options:NSKeyValueObservingOptionNew
                      context:nil];
    [self addMapView];
    [self addShareBtn];
}
//KVO返回检测Delegate中isShare的变化
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    shareBtn.selected = ([[change valueForKey:@"new"] isEqualToString:@"1"])? YES:NO;
}
-(void)dealloc
{
    // 移除KVO
    [__APPDELEGATE removeObserver:self forKeyPath:@"IsShare"];
}
时间: 2024-11-05 03:20:05

ios设计模式—kvo观察者模式的相关文章

iOS设计模式之观察者模式

观察者模式: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 何时使用观察者模式 (1):对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变 (2): 一个对象必须通知其他对象,而他又不需要知道其他对象是什么. (3): 有两种抽象类型相互依赖,将他们封装在各自的对象中,就可以对他们单独进行改变和复用. 在Cocoa Touch框架中使用观察者模式 1:通知类型: 使用NSNotificationCenter和NSNot

IOS设计模式之三(适配器模式,观察者模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 适配器(Adapter)模式 适配器可以让一些接口不兼容的类一起工作.它包装一个对象然后暴漏一个标准的交互接口. 如果你熟悉适配器设计模式,苹果通过一个稍微不同的方式来实现它-苹果使用了协议的方式来实现.你可能已经熟悉UITableViewDelegat

iOS设计模式

iOS设计模式,很多开发这都是听得多,但是有时候自己即使用过也不会很在意,开发者在写代码的时候也不会注意它. 在软件设计领域,设计模式是对通过问题的可复用的解决方案.设计模式是一系列帮你写出可理解和复用的模板,设计模式帮你创建松耦合的代码,你不需要花费太多就可以改变或者替换代码中的组件. (1)代理模式 应用场景:当一个类的某些功能需要由其他别的类别来实现的,但是又不确定是哪个类 优势:松耦合 实例:tableView的数据源delegate,通过和protocol的配合,完成委托. 列表row

iOS 设计模式

Ios 设计模式,你可能听说过,但是你真正知道这是什么意思么?大部分的开发者大概都同意设计模式很重要,但是关于这一部分却没有很多的文章去介绍它,我们开发者很多时候写代码的时候也并不重视设计模式. 设计模式是在软件设计上去解决普通问题的可重用的方法.他们是是帮助你让所写的代码更加容易理解和提高可重用性的模板.它们还可以帮你创建松散耦合的代码是你能不费很大功夫就可以改变或者替代你的代码中的一部分. 如果你对设计模式感到生疏,那么我有个好消息告诉你!首先,你已经用了很多ios设计模式多亏了Cocoa

IOS设计模式之四(备忘录模式,命令模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 备忘录(Memento)模式 备忘录模式快照对象的内部状态并将其保存到外部.换句话说,它将状态保存到某处,过会你可以不破坏封装的情况下恢复对象的状态,也就是说原来对象中的私有数据仍然是私有的. 如何使用备忘录模式 在ViewController.m中增加

IOS设计模式之一(MVC模式,单例模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么翻译错误,请与我联系谢谢. iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不会太关注它. 在软件设计领域,设计模式是对通用问题

IOS设计模式之三:MVC模式

IOS设计模式之三:MVC模式 提到ios中的mvc不得不提2011秋季斯坦福课程的老头,他的iphone开发公开课是所有描述ios中mvc模式最为准确并且最为浅显易懂的. 模型-视图-控制器 这个模式其实应该叫做MCV,用控制器把model与view隔开才对,也就是model与view互相不知道对方的存在,没有任何瓜葛,他们就像一个团队里吵了架的同事,如果有项目需要他俩来参与,那么最好有第三者来管理他俩之间的沟通与协调.这个第三者就是控制器. 既然管理,那么姑且就把这个控制器提做项目经理吧,这

iOS设计模式 - 概述

最近可自由安排的时间比较多, iOS应用方面, 没什么好点子, 就先放下, 不写了.花点时间学学设计模式. 之后将会写一系列博文, 记录设计模式学习过程. 当然, 因为我自己是搞iOS的, 所以之后设计代码部分, 将尽量与objective-c相结合. iOS设计模式 - 概述           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/details/40372113 一.定义 设计模式(Des

iOS开发-KVO的奥秘

iOS开发-KVO的奥秘 字数2933 阅读3842 评论28 喜欢57 序言 在iOS开发中,苹果提供了许多机制给我们进行回调.KVO(key-value-observing)是一种十分有趣的回调机制,在某个对象注册监听者后,在被监听的对象发生改变时,对象会发送一个通知给监听者,以便监听者执行回调操作.最常见的KVO运用是监听scrollView的contentOffset属性,来完成用户滚动时动态改变某些控件的属性实现效果,包括渐变导航栏.下拉刷新控件等效果. 渐变导航栏 使用 KVO的使用