Я пробовал несколько способов использовать UIAlertController вместо UIAlertView. Я пробовал несколько способов, но не могу заставить работать предупреждение. Вот мой код, который отлично работает в IOS 8 и IOS 9, но отображается с устаревшими флагами. Я попробовал элегантное предложение ниже, но не могу заставить его работать в этом контексте. Мне нужно отправить свое приложение, и это последнее, что нужно решить. Спасибо за любые дальнейшие предложения. Я новичок.
#pragma mark - BUTTONS ================================
- (IBAction)showModesAction:(id)sender {
NSLog(@"iapMade: %d", iapMade3);
// IAP MADE ! ===========================================
if (!iapMade3) {
//start game here
gamePlaysCount++;
[[NSUserDefaults standardUserDefaults]setInteger:gamePlaysCount forKey:@"gamePlaysCount"];
NSLog(@"playsCount: %ld", (long)gamePlaysCount);
if (gamePlaysCount >= 4) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Basic"
message: THREE_PLAYS_LIMIT_MESSAGE
delegate:self
cancelButtonTitle:@"Yes, please"
otherButtonTitles:@"No, thanks", nil];
[alert show];
NSString *path = [[NSBundle mainBundle] pathForResource:@"cow" ofType:@"wav"];
_pop =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
[_pop play];
[self dismissViewControllerAnimated:true completion:nil];
} else {
if (gamePlaysCount == 1) {
// Create & store the next 5 mins when player gets 3 more lives
nextDateToPlay = [[NSDate date] dateByAddingTimeInterval:60*60*0.1];
NSLog(@"CURRENT DATE: %@", [NSDate date]);
NSLog(@"NEXT DAY: %@", nextDateToPlay);
[[NSUserDefaults standardUserDefaults]setObject: nextDateToPlay forKey:@"nextDateToPlay"];
NSLog(@"nextDateToPlay: %@", nextDateToPlay);
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Basic"
message: THREE_PLAYS_LIMIT_MESSAGE2
delegate:self
cancelButtonTitle:@"Got it!"
otherButtonTitles:@"Start", nil];
[alert show];
} else {
if (gamePlaysCount == 3) {
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Basic"
message: THREE_PLAYS_LIMIT_MESSAGE3
delegate:self
cancelButtonTitle:@"Yep, I Know!"
otherButtonTitles:@"Start", nil];
[alert show];
}
}
}
}
}
// IAP NOT MADE =============================
#pragma mark - ALERTVIEW DELEGATE ============================
-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
if ([[alertView buttonTitleAtIndex:buttonIndex] isEqualToString:@"Yes, please"]) {
UIStoryboard *storyboard = self.storyboard;
MenuViewController *svc = [storyboard instantiateViewControllerWithIdentifier:@"Store"];
svc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:svc animated:YES completion:nil];
}
}
Ответы:
Из iOS8 Apple предоставляет новый
UIAlertController
класс, который вы можете использовать вместо UIAlertView, который теперь устарел, это также указано в сообщении об устаревании:Итак, вы должны использовать что-то вроде этого
источник
[alert dismissViewControllerAnimated:YES completion:nil];
из обработчиков действий, потому что без этого кода алерт автоматически скрывается. Более того, в блок завершения можно ошибочно поместить код, который не будет выполнен. Cheers :)Если вы хотите использовать это предупреждение в классе NSObject, вы должны использовать его так:
источник
Быстрая версия новой реализации:
источник
Xcode 8 + Swift
Предполагая,
self
что этоUIViewController
:источник
UIAlertController + AlertController.h
UIAlertController + AlertController.m
в вашем ViewController.m
источник
Используйте UIAlertController вместо UIAlertView
источник
Я пробовал описанные выше методы, и никто не может показать представление предупреждения, только когда я помещаю
presentViewController:
метод вdispatch_async
предложение:dispatch_async(dispatch_get_main_queue(), ^ { [self presentViewController:alert animated:YES completion:nil]; });
Обратитесь к Альтернативе UIAlertView для iOS 9? .
источник
источник
Проверь это:
источник
[self showAlert];
// вызов методаисточник