1. 程式人生 > >iOS開發之如何優雅的替換工程裡所有的系統彈框UIAlertView,UIActionSheet,UIAlertController 的原理

iOS開發之如何優雅的替換工程裡所有的系統彈框UIAlertView,UIActionSheet,UIAlertController 的原理

現在又要替換UIAlertView和UIActionSheet

UIActionSheet使用的不多,按照系統的屬性方法名,重新定義一個類 實現一下就好,和UISwitch那個類似。

這裡以UIAlertView為例,因為它使用的特別多,直接在工程裡能搜到500多個,肯定不能一個一個改。

為什麼要改它呢,因為調整了系統字型後UIAlertView的字型也會跟著變化,就像這個

目的是做成UIAlertView的字型不隨系統字型變化而變化。

怎麼實現呢

1.自己寫個一樣的,但其實這個警告框挺複雜的,寫了一些,然後發現GitHub有一個幾乎和系統一樣的XXXAlertView所以就用它來替換。

2.使用巨集定義把系統的全部替換    #define UIAlertView  XXXAlertView

3.然後在第三方程式碼裡把原來呼叫的方法實現一下(我是又寫了一個類,不建議,這樣需要多建立一個類,呼叫會有點亂)

eg

@property(nonatomic,readonly,getter=isVisible) BOOL visible;

- (instancetype _Nullable )initWithTitle:(nullable NSString *)title message:(nullable NSString *)message delegate:(nullable id )delegate cancelButtonTitle:(nullable NSString *)cancelButtonTitle otherButtonTitles:(nullable NSString *)otherButtonTitles, ...;

- (void)show;

4.把delegate傳遞好,不要提前釋放,

5.由於被showWithCompletionHandler封裝過,這裡需要把第三方代理方法也寫上。

原理就這麼多