將子控件的block傳給父控件的block實現(xiàn)

首先先說下我的意思:子控件有個按鈕點擊的block回調(diào),但是我封裝出來,只是想用父控件的block就能實現(xiàn)那個按鈕的點擊事件,而并不關(guān)心子控件。就如下圖不用寫注釋那樣的代碼也能實現(xiàn)按鈕的點擊事件。

圖一

我最開始的想法:是block是一個屬性,所以我就進行賦值,將父控件的block賦值給子控件的block??墒遣荒艹晒?,就算是將子控件的block賦值給父控件的block也不能成功,都是在那個按鈕點擊的時候,block就已經(jīng)為空了。

進行block的賦值

當(dāng)點擊按鈕的時候,block不存在

最后的想法:既然上面那種方法行不通,我就只能考慮別的方式了,最后想到了,可以進行block方法的傳遞,然后果然就成功了,就如下:

- (LCFarmerBankAlertSubView *)subView {
    if (!_subView) {
        _subView = [LCFarmerBankAlertSubView farmerBankAlertSubView];
        __block LCFarmerBankAlertView *weakSelf = self;
        _subView.openButtonClickedBlock = ^{
            if (weakSelf.openButtonClickedBlock) {
                weakSelf.openButtonClickedBlock();
            }
        };
    }
    return _subView;
}

在這里面實現(xiàn)子控件的block,并且再在子控件block的回調(diào)中實現(xiàn)父控件的block方法。這樣直接調(diào)用父控件的block,也能實現(xiàn)子控件的按鈕點擊事件了。

這算非常簡單的問題了,只是當(dāng)時很困惑,所以記錄一下,看客勿怪,有更好的方法建議,還望傳授。

補充:

原來那種賦值的方法,可以傳遞block,只不過我是在initWithFrame方法里面進行賦值的,可是那個時候父控件的block還沒有值,所以才會失敗,然后只要將賦值寫在父控件block的setter方法里面就可以了

- (void)setOpenButtonClickedBlock:(OpenButtonClickedBlock)openButtonClickedBlock {
    _openButtonClickedBlock = openButtonClickedBlock;
    self.subView.openButtonClickedBlock = self.openButtonClickedBlock;
}

還有就是測試的時候發(fā)現(xiàn):
1 __block并不能解決循環(huán)引用的問題,還是必須要用__weak。
2 當(dāng)移除子控件的時候,如果子控件是設(shè)置的為控制器的屬性,還需要將子控件設(shè)置為nil,才會調(diào)用子控件的delloc方法,因為它被控制器和父控件兩個強引用

    [self.navigationController.view addSubview:self.alertView];
    [self.navigationController.view bringSubviewToFront:self.alertView];
    __weak LCAccountViewController *weakSelf = self;
    self.alertView.openButtonClickedBlock = ^{
        [weakSelf.alertView removeFromSuperview];
        weakSelf.alertView = nil;
    };

總結(jié):你認為的錯的方式的時候,有時候只是你沒有多思考,沒有找到錯誤的原因和正確的方式,遇到事情還是要多思考。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 《裕語言》速成開發(fā)手冊3.0 官方用戶交流:iApp開發(fā)交流(1) 239547050iApp開發(fā)交流(2) 10...
    葉染柒丶閱讀 28,715評論 5 20
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,812評論 25 709
  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,295評論 0 17
  • 在接近四十度的炎炎烈日下,今天,我們拉開了我們堪薩斯生活的帷幕。我昨天因為和好朋友睡在一起,所以我們暢聊到...
    Oneworld閱讀 376評論 1 4
  • 在沒有看到關(guān)于她的視頻前,我看到了她的文字,被震撼到。 《穿過大半個中國去睡你》,這是14年她在網(wǎng)路上爆紅的一首詩...
    PP要成才閱讀 395評論 0 1

友情鏈接更多精彩內(nèi)容