代理 block 通知傳值

 數據的逆傳目前有三種方法(數據提供/發佈者 數據接收者):
1)代理(代理方法中帶要傳遞的數據參數)
2)通知(通知的發佈者object是要傳遞的數據參數,通知發佈者要求通知中心發佈通知,通知接受者註冊通知監聽器(裏面有   通知的方法,注意,在該方法實現時,其必帶的參數是(NSNotification *)notification,通知接受者取消註冊通知監聽器) 
3)block方法(block的參數設置爲要傳遞的數據參數)post

 

1 通知傳值(或者傳遞事件):分爲三個步驟:注意:通知能夠是多對1發通知,也能夠是一對多發通知,多對1發通知(同一個通知)時能夠經過通知的object參數的不一樣來傳遞不一樣的信息,即同一個名稱的通知能夠根據不一樣的通知發佈者來各自設置不一樣的object參數來向通知接受者發佈不一樣的信息spa

1.1)代理

  • 通知發佈者經過通知中心發佈通知(即在通知發佈者.m文件中實現方法[[NSNotificationCenter defaultCenter] postNotificationName:<#(nonnull NSString *)#> object:<#(nullable id)#>]便可,其中要傳遞的數據或事件經過參數object來實現)尤爲注意:當傳遞的值是整型或float等基本數據類型時,不能直接傳遞,由於object是id類型,便是對象,而基本數據類型不是對象,所以不能直接傳。一旦強制傳遞基本數據,將致使程序崩潰。此時,須要建立一個對象,把基本數據值做爲該對象的屬性值進行間接傳遞,通常做爲UIButton的tag值傳遞button便可實現傳遞。
  • 代碼以下:
  • 1.server

  •     ActivityPointProductModel *pointProductModel = _pointProductList[indexPath.row];對象

        UIButton *btn = [[UIButton alloc] init];事件

    //pointProductModel.ProductID是基本數據類型(int float NSInteger等)rem

  •     btn.tag = pointProductModel.ProductID;get

        [[NSNotificationCenter defaultCenter]it

         postNotificationName:@"EnergyCollectionViewChangeVC" object:btn];io

  •  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeToEnergyExchangeViewController:) name:@"EnergyCollectionViewChangeVC" object:nil];

- (void)changeToEnergyExchangeViewController:(NSNotification *)noti{

    UIButton *btn = [noti object];

    ReEnergyExchangeViewController *EnergyExchangeVC = [[ReEnergyExchangeViewController alloc] init];

    EnergyExchangeVC.productID = btn.tag

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

}

1.2)

  • 1.2.1通知接受者註冊通知監聽器:即在通知接受者.m文件中實現方法 [[NSNotificationCenter defaultCenter] addObserver:<#(nonnull id)#> selector:<#(nonnull SEL)#> name:<#(nullable NSString *)#> object:<#(nullable id)#>]  其中selector方法必須帶參數,這個參數就是通知自己   
  • 1.2.2  通知接受者實現通知監聽器中的方法,從而實現接收通知信息:即實現selector方法 - <#selector#>:(NSNotification *)notification{ UIView *view = [notification object];  ............. },通知信息就在通知notification中

1.3)

  • 註銷通知監聽器:即在通知接受者.m文件中實現方法 - (void)dealloc{  [[NSNotificationCenter defaultCenter] removeObserver:self];  }便可

 

 

三種傳值方式實用舉例demo:http://pan.baidu.com/s/1dEQzeq1

未完待續

相關文章
相關標籤/搜索