Это совсем не так.
Если 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) Создайте свой собственный дизайн и соответствующий вызов методов делегирования при необходимости.
Другой подход заключается в использовании частного API Apple, но это может привести к плохим результатам.
Это ОЧЕНЬ ХАЙКИЙ подход. Во-первых, у вас нет гарантий, что он будет работать. Во-вторых, ваше приложение может быть отклонено. Поэтому, я бы не рекомендовал его ...
Однако, если вы действительно хотите, чтобы пойти с этим подходом, то попробуйте сделать следующее:
После [myAlertView show];
взгляд на его свойства после некоторой задержки (т.е. 0,01 сек достаточно):
Теперь посмотрим на наличие подозрительных свойств (вероятно класса UIView), которые могли бы иметь информацию пользовательского интерфейса связанной. Например, __representer
выглядит довольно интересно - у него есть ограничения, у него есть labelContainerView
... Попробуйте сыграть с этими свойствами.
Для получения этого __representer
используйте KVC и KVO (то есть начните с id theAlertController = [myAlertView valueForKey:@"_alertController"];
). Затем погрузитесь глубже и глубже.
Надеюсь, вы сможете найти полезные свойства и сможете изменять их значения через KVC.
Вы знакомы с другими элементами alertViews в своем приложении, или вы используете 'UIAlertController' и бренд? – Avi
@Avi Мы не используем UIAlertController, кроме как через этот API (и не планируем, как мы делаем пользовательские представления). – helloB
Я бы рекомендовал создать пользовательский контроллер, а затем попробовать swizzle. – uchiha