這根本不是直截了當的。
如果SDK使用UIAlertView
,然後嘗試swizzling的show
方法。
你的實現應該做大致如下:
1)不要讓原來的UIAlertView中顯示 - 這是很難進行定製。
2)保持舊的.delegate
的引用,以便能夠在需要時通知它。
3)創建您自己的自定義UIView並使用[[UIApplication sharedApplication].keyWindow addSubview:myCustomAlertView];
。
4)我相信你可以得到所有以前的UIAlertView中的變量(即按鈕標題,文本框等),利用其特性,如
@property(nonatomic,copy) NSString *title;
@property(nullable,nonatomic,copy) NSString *message;
- (nullable NSString *)buttonTitleAtIndex:(NSInteger)buttonIndex;
@property(nonatomic,readonly) NSInteger numberOfButtons;
@property(nonatomic) NSInteger cancelButtonIndex;
5)創建您自己的設計和調用相應的委託方法需要的時候。
其他方法是使用Apple的Private API,但這可能會導致不好的結果。
這是一個非常困難的方法。首先,你不能保證它甚至可以工作。其次,您的應用可能會被拒絕。因此,我不會真的建議吧...
但是,如果你真的想要去使用這種方法,然後再嘗試這樣做:
後[myAlertView show];
看看它的性能有一定的延遲後(即0.01秒就夠了):
現在查找可疑的性質(可能是UIView類),這可能具有UI相關的信息。例如,__representer
看起來很有趣 - 它有限制,它有labelContainerView
...嘗試使用這些屬性進行播放。
爲了得到__representer
,使用KVC和KVO(即從id theAlertController = [myAlertView valueForKey:@"_alertController"];
開始)。然後下潛越來越深。
希望你能找到有用的屬性,並能夠通過KVC改變它們的值。
您是否在應用中標記了其他alertViews,或者您使用'UIAlertController's和品牌? – Avi
@Avi除了通過這個API,我們不使用UIAlertController(並且不打算像我們做自定義視圖一樣)。 – helloB
我會建議創建一個自定義控制器,然後嘗試調劑。 – uchiha