美文网首页
iOS开发-通知传值

iOS开发-通知传值

作者: 善良的皮蛋 | 来源:发表于2019-07-23 14:25 被阅读0次

通知的使用

  • 通知传值
  • 通知监听

1.通知传值 (UIViewController
NSDictionary *dict = @{@"c2cmsg":self.codeMessageValue};
[[NSNotificationCenter defaultCenter] postNotificationName:@"c2cSellout" object:nil userInfo:dict];

我碰到的情况:在scrollview上滑动创建两个类似自定义UIView导致通知重复创建,然后最终导致通知的方法被多次调用

  • 首先在刷新自定义UIView的时候先移除一次通知(CustomView)
 /** 移除特定通知-再创建不然就会重复 */
 [[NSNotificationCenter defaultCenter] removeObserver:self name:@"c2cSellout" object:nil];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sellc2cout:) name:@"c2cSellout" object:nil];
#pragma mark - 监听
- (void)sellc2cout:(NSNotification *)notification{
    /** 移除特定通知-再创建不然就会重复 */
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"c2cSellout" object:nil];
[self loadPublishOrderWithType:MYDC2CTransCenterViewTypeForSell valicode:notification.userInfo[@"c2cmsg"]];
}
  • 移除通知(UIViewcontroller CustomView)
/** 移除通知 */
- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
2.通知监听
/** 注册监听通知-键盘回收和展开 */
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide:) name:UIKeyboardWillHideNotification object:nil];
  • 监听键盘弹出
- (void)keyboardWillChangeFrame:(NSNotification *)notification{
    //取出键盘动画的时间(根据userInfo的key----UIKeyboardAnimationDurationUserInfoKey)
    CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
    
    //取得键盘最后的frame(根据userInfo的key----UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 227}, {320, 253}}";)
    CGRect keyboardFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    
    //计算控制器的view需要平移的距离
    CGFloat transformY = keyboardFrame.origin.y - self.view.frame.size.height;
    
    //执行动画
    [UIView animateWithDuration:duration animations:^{
        [self.codeContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.left.right.equalTo(self.codeBgView);
            make.height.equalTo(@(SCREEN_HEIGHT*0.4));
            make.bottom.equalTo(self.codeBgView.mas_bottom).offset(transformY-90);
        }];
    }];
}
  • 监听键盘收回
- (void)keyboardDidHide:(NSNotification *)notification{
    CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] floatValue];
    [UIView animateWithDuration:duration animations:^{
        [self.codeContentView mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.left.right.bottom.equalTo(self.codeBgView);
            make.height.equalTo(@(SCREEN_HEIGHT*0.4));
            
        }];
    }];
}

  • 最后移除通知
/** 移除通知 */
- (void)dealloc{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

相关文章

  • iOS 常用传值方式

    总结 iOS 日常开发中的几种常用传值方式:正向传值代理传值block传值通知传值单例 文章代码:https://...

  • IOS 开发 通知传值

    第三个界面的值传给第一个界面。 1. 在第一个界面建立一个通知中心, 通过通知中心,注册一个监听事件 2. 在第一...

  • iOS开发-通知传值

    通知的使用 通知传值 通知监听 1.通知传值 (UIViewController) 我碰到的情况:在scrollv...

  • ios 常见的几种逆向传值方式

    在iOS开发中,常见的几种逆向传值方式,有代理(delegate)、通知(NSNotification),bloc...

  • iOS中常见的几种逆向传值方式

    在iOS开发中,常见的几种逆向传值方式,有代理(delegate)、通知(NSNotification),bloc...

  • iOS 通知

    iOS 通知传参使用方法 尽量不要在viewWillDisappear:方法中移除通知 iOS通知传值的使用 1、...

  • iOS的五种传值

    前言 iOS常见的五种传值分别为属性传值,通知传值,代理传值,block传值,单例传值 属性传值 用于正向传值,简...

  • ioS 页面(代理、通知、block、单例、属性)传值

    iOS 页面(代理、通知、block、单例、属性)传值 一、传值分类 页面传值基本分为两种:正向传值和反向传值。 ...

  • iOS 页面(代理、通知、block、单例、属性)传值

    iOS 页面(代理、通知、block、单例、属性)传值 一、传值分类 页面传值基本分为两种:正向传值和反向传值。 ...

  • Block传值

    iOS传值一共有四种:属性传值,代理传值,通知传值以及Block传值; 今天我们来说一下Block传值: 概念:带...

网友评论

      本文标题:iOS开发-通知传值

      本文链接:https://www.haomeiwen.com/subject/yxiolctx.html