NSNotificationCenter 通知的使用

本文详细介绍了如何使用 NSNotificationCenter 来监听键盘的显示与隐藏事件,并实现了相应的界面调整。此外,还探讨了通知的正确注册与移除方法,避免内存泄漏等问题。

NSNotificationCenter 通知的使用

之前在项目里使用了键盘的通知,但是没释放,导致之后的页面一直在调用键盘的事件,为了加深印象,我在此记录下来

//注册通知时请放在viewWillAppear里,不然等页面pop回到这个页面时,键盘的通知功能就没有了

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    //使用NSNotificationCenter 键盘出现时
    [[NSNotificationCenter defaultCenter] addObserver:self

                                             selector:@selector(keyboardWasShown1:)

                                                 name:UIKeyboardDidShowNotification object:nil];

    //使用NSNotificationCenter 键盘隐藏时
    [[NSNotificationCenter defaultCenter] addObserver:self

                                             selector:@selector(keyboardWillBeHidden1:)

                                                 name:UIKeyboardWillHideNotification object:nil];

}

//实现当键盘出现的时候计算键盘的高度大小
- (void)keyboardWasShown1:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    //kbSize键盘尺寸 (有width, height)
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;
    //输入框随键盘上升
    self.toolBarView.frame = CGRectMake(0, self.scrollView.frame.size.height+self.scrollView.frame.origin.y - kbSize.height, SCREEN_WIDTH, 60);
    //收益框随键盘上升
    self.showView.frame = CGRectMake(0, self.scrollView.frame.size.height+self.scrollView.frame.origin.y - kbSize.height - 40 , SCREEN_WIDTH, 40);
   self.showView.hidden = NO;
   // self.showLabel.text = [NSString stringWithFormat:@" 预期收益: -- 元      可用余额: --元"];

   // self.showLabel.attributedText =[Common setupAttributeString:self.showLabel.text highlightText:@"预期收益:" Color:RGB(255,159,15) highlightText1:@"元" Color1:RGB(255,159,15) highlightText2:@"可用余额:" Color2:RGB(255, 159, 15) highlightText3:@"元" Color3:RGB(255, 159, 15)];

    if (self.inTextField.text.length != 0) {

        self.showView.hidden = NO;

    }
    DLOG(@"获取余额接口请求");

    [self CBbalance];//获取余额

}

//当键盘隐藏的时候
- (void)keyboardWillBeHidden1:(NSNotification*)aNotification
{
    //do something
    self.toolBarView.frame = CGRectMake(0, self.scrollView.frame.size.height+self.scrollView.frame.origin.y , SCREEN_WIDTH, 60);

    self.showView.frame = CGRectMake(0, self.scrollView.frame.size.height+self.scrollView.frame.origin.y - 40 , SCREEN_WIDTH, 40);

    if (self.inTextField.text.length == 0) {

        self.showView.hidden = YES;
    }else{
        self.showView.hidden = NO;
    }


}



我这个需求是在键盘出现时请求一个接口,并显示一行文字,提醒用户.当时没有释放,在后面的界面用到键盘时,接口还是会请求,只是文字的Label初始化不在,所以没有显示文字,导致我当时也没发现这个问题.到后来用户请求接口比较慢的时候就出现问题了,键盘上不来.


-(void)viewWillDisappear:(BOOL)animated{

    [super viewWillDisappear:YES];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];

}


只要在页面消失的时候,释放通知就可以了

下面说一下正常的NSNotificationCenter 的注册和释放

//在当前页面注册个name通知,并在通知被调用后执行requestPhoneContrast方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(requestPhoneContrast) name:@"name" object:nil];

//在已经注册过通知之后的任何页面调用通知,注意name不要写错了
 [[NSNotificationCenter defaultCenter] postNotificationName:@"name" object:nil];

//在当前页面释放通知
-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:YES];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:name object:nil];

}
//或

- (void)dealloc {    
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

释放通知的这两种方法的利弊会在下一篇博客中记录

01、数据简介 出口韧性是地级市在面对外部震荡和压力时,能够承受并迅速适应、应对变化的能力。这种能力体现在地级市经济结构的灵活性、创新能力和竞争力,以及地方政府的政策支持和产业调整能力等多个方面。 城市出口韧性对于城市的经济发展、就业稳定、国际贸易地位以及风险抵御能力等方面都具有重要影响。因此,城市应加强出口韧性的建设,提高应对外部冲击的能力,以推动其经济的可持续发展。 数据名称:地级市-城市出口韧性数据 数据年份:2011-2022年 02、相关数据 代码 年份 地区 城市 省份 城市出口韧性 距离港口的最近距离 最终进口额_百万人民币2 最终出口额_百万人民币2 人均道路面积2 年末金融机构各项贷款余额万元2 地区生产总值万元2 科学支出万元2 地方财政一般预算内支出万元2 城镇居民人均可支配收入元2 固定资产投资2 实际使用外商投资额百万美元2 城镇化率2 外贸依存度 出口贸易 年平均汇率 实际使用外商投资额百万人民币2 外资依存度 金融发展水平 财政投资力度 科学技术水平 出口偏离度 x_地区生产总值万元2 x_城镇化率2 x_人均道路面积2 x_外贸依存度 x_出口贸易 x_出口偏离度 x_金融发展水平 x_城镇居民人均可支配收入元2 x_财政投资力度 x_科学技术水平 x_距离港口的最近距离 x_外资依存度 地区生产总值万元2_sum y_地区生产总值万元2 城镇化率2_sum y_城镇化率2 人均道路面积2_sum y_人均道路面积2 外贸依存度_sum y_外贸依存度 出口贸易_sum y_出口贸易 出口偏离度_sum y_出口偏离度 金融发展水平_sum y_金融发展水平 城镇居民人均可支配收入元2_sum y_城镇居民人均可支配收入元2 财政投资力度_sum y_财政投资力度 科学技术水平_sum y_科学技术水平
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值