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封裝過,這裡需要把第三方代理方法也寫上。
原理就這麼多