Saya telah mencoba beberapa cara untuk menggunakan UIAlertController, bukan UIAlertView. Saya mencoba beberapa cara tetapi saya tidak dapat membuat tindakan peringatan bekerja. Berikut adalah kode saya yang berfungsi dengan baik di IOS 8 dan IOS 9 tetapi muncul dengan tanda yang tidak berlaku lagi. Saya mencoba saran elegan di bawah ini tetapi saya tidak dapat membuatnya berfungsi dalam konteks ini. Saya perlu mengirimkan aplikasi saya dan ini adalah hal terakhir yang harus diatasi. Terima kasih atas saran lebih lanjut. Saya seorang pemula.
#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];
}
}
Jawaban:
Dari iOS8 Apple menyediakan
UIAlertController
kelas baru yang dapat Anda gunakan sebagai pengganti UIAlertView yang sekarang sudah usang, itu juga dinyatakan dalam pesan penghentian:Jadi, Anda harus menggunakan sesuatu seperti ini
sumber
[alert dismissViewControllerAnimated:YES completion:nil];
dari penangan tindakan, karena peringatan tersembunyi secara otomatis tanpa kode ini. Selain itu, seseorang dapat salah memasukkan kode di blok penyelesaian yang tidak akan dieksekusi. Salam :)Jika Anda ingin menggunakan peringatan ini di kelas NSObject, Anda harus menggunakan seperti:
sumber
Versi Swift dari implementasi baru adalah:
sumber
Xcode 8 + Swift
Dengan asumsi
self
adalahUIViewController
:sumber
UIAlertController + AlertController.h
UIAlertController + AlertController.m
di ViewController.m Anda
sumber
Gunakan UIAlertController sebagai ganti UIAlertView
sumber
Saya mencoba metode di atas, dan tidak ada yang bisa menampilkan tampilan peringatan, hanya ketika saya meletakkan
presentViewController:
metode dalamdispatch_async
kalimat:dispatch_async(dispatch_get_main_queue(), ^ { [self presentViewController:alert animated:YES completion:nil]; });
Lihat Alternatif ke UIAlertView untuk iOS 9? .
sumber
sumber
Periksa ini:
sumber
[self showAlert];
// memanggil Metodesumber