Objective-C Runtime之着魔的UIAlertView

原文出處: ian博客(@ianisme )   

傳統的UIAlertView:

在一個類中有多個UIAlertView,不同的UIAlertView對應不同的事件,我們使用的傳統方法如下:

我們要給每個UIAlertView賦值一個tag值,在delegate方法中還要進行tag的判斷以及buttonIndex的判斷,太繁瑣了。

着魔的UIAlertView:

下面我們使用Category和Associated Objects進行魔法修改

創建一個UIAlertView的Category

UIAlertView+ActionBlock.h

UIAlertView+ActionBlock.m

在主類中取消delegate,使用block屬性

我們通過使用Category給UIAlertView擴展了一個block屬性,當block被設置後就會調用setCallBack方法,觸發self.delegate = self,即主類中的UIAlertView的delegate方法被Category中的方法覆蓋。這樣不僅有效解決問題,還解決了其他人修改該類的安全性(block被去掉後,原delegate恢復)

如下不給tag值爲1003的UIAlertView設置block,即調用原delegate方法。

相關Demo下載:

https://github.com/ianisme/UIAlertViewBYRuntime_Demo

總結:

通過Associated Objects我們有效的解決了UIAlertView的繁瑣問題,如果您是開發iOS8以上的應用,建議您棄用UIAlertView,蘋果的UIAlertController已經有了更好的解決方案。QQ技術交流羣290551701

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章