Что, кажется, изменилось, так это то, что в iOS 12 и предыдущих версиях ваше приложение будет иметь сильную ссылку на окно, просто вызывая [alertWindow makeKeyAndVisible];
, в iOS 13 оно больше не будет.
Что происходитявляется то, что единственная надежная ссылка на ваш alertWindow
находится в вашем requestHapticSetting
функционале, и как только этот функционал вернется, окно будет уничтожено, что приведет к удалению вашего предупреждения из представления.
Это может быть исправленопросто приняв iOS 13 сцены, но я не проверял это.То, что я могу предложить, что не будет работать должным образом, если вы используете сцены , это удерживает ваше окно предупреждений в сильной переменной где-то в вашем коде, а затем использует его для представления предупреждения.Я бы предложил сделать это в одиночном приложении или в самом AppDelegate.
//AppDelegate.h
...
@property (strong) UIWindow *alertWindow;
....
//AppDelegate.m
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
self.alertWindow = [[UIWindow alloc] init];
self.alertWindow.rootViewController = [[UIViewController alloc] init];
self.alertWindow.windowLevel = UIWindowLevelAlert + 1;
...
}
...
//Your class that's presenting the alert
#import "AppDelegate.h"
...
- (void)requestHapticSetting{
AppDelegate *appDelegate = (AppDelegate *)UIApplication.sharedApplication;
[alertWindow makeKeyAndVisible];
if(isHapticOn){
hapticMessage = @"Haptic feedback is currently\nturned ON.\nPlease update preference.";
} else {
hapticMessage = @"Haptic feedback is currently\nturned OFF.\nPlease update preference.";
}
UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Haptic Setting"
message:hapticMessage
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* onAction = [UIAlertAction actionWithTitle:@"TURN ON" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[self saveHapticSettingOn];
[((AppDelegate *)UIApplication.sharedApplication).alertWindow setHidden:YES];
}];
UIAlertAction* offAction = [UIAlertAction actionWithTitle:@"TURN OFF" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[self saveHapticSettingOff];
[((AppDelegate *)UIApplication.sharedApplication).alertWindow setHidden:YES];
}];
[alert addAction:offAction];
[alert addAction:onAction];
[alertWindow.rootViewController presentViewController:alert animated:YES completion:nil];
}
Для кода Swift отметьте этот ответ .