自定義控件使用block示例

使用 Block
另一個選擇是使用 block。再一次用餅狀圖舉例,代碼看起來大概是這樣:

@interface PieChart : UIControl

@property (nonatomic,copy) void(^selectionHandler)(PieChartSection* selectedSection);

@end

在選取行為的代碼中,你只需要執行它。在此之前檢查一下block是否被賦值非常重要,因為執行一個未被賦值的 block 會使程序崩潰。

if (self.selectionHandler != NULL) {
    self.selectionHandler(self.selectedSection);
}

這種方法的好處是可以把相關的代碼整合在視圖控制器中:

- (void)setupPieChart
{
    self.pieChart.selectionHandler = ^(PieChartSection* section) {
        // 處理區塊
    }
}

就像代理,每個動作通常只有一個 block。另一個重要的限制是不要形成引用循環。如果你的視圖控制器持有餅狀圖的強引用,餅狀圖持有 block,block 又持有視圖控制器,就形成了一個引用循環。只要在 block 中引用 self 就會造成這個錯誤。所以通常代碼會寫成這個樣子:

__weak id weakSelf = self;
self.pieChart.selectionHandler = ^(PieChartSection* section) {
    MyViewController* strongSelf = weakSelf;
    [strongSelf handleSectionChange:section];
}

一旦 block 中的代碼要失去控制 (比如 block 中要處理的事情太多,導致 block 中的代碼過多),你還應該將它們抽離成獨立的方法,這種情況的話可能用代理會更好一些。

摘自:自定義控件

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本文將討論一些自定義視圖、控件的訣竅和技巧。我們先概述一下 UIKit 向我們提供的控件,并介紹一些渲染技巧。隨后...
    評評分分閱讀 1,458評論 1 32
  • 本文將討論一些自定義視圖、控件的訣竅和技巧。我們先概述一下 UIKit 向我們提供的控件,并介紹一些渲染技巧。隨后...
    愛敲代碼的果果閱讀 525評論 0 3
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,180評論 4 61
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,200評論 30 471
  • 00413-【今日話題】-野小合 媽媽生病已經有大半個月了,弟弟在外地工作,就因為弟弟沒有回來看她,我媽天天和我抱...
    清野拾夢閱讀 417評論 1 3