example ios objective-c uialertview uialertcontroller

ios - example - ui alert controller swift 4



UIAlertView primer IOS 9 en desuso (10)

Haga UIAlertController + AlertController Categoría como:

UIAlertController + AlertController.h

typedef void (^UIAlertCompletionBlock) (UIAlertController *alertViewController, NSInteger buttonIndex); @interface UIAlertController (AlertController) + (instancetype)showAlertIn:(UIViewController *)controller WithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitle tapBlock:(UIAlertCompletionBlock)tapBlock; @end

UIAlertController + AlertController.m

@implementation UIAlertController (NTAlertController) + (instancetype)showAlertIn:(UIViewController *)controller WithTitle:(NSString *)title message:(NSString *)message cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitle tapBlock:(UIAlertCompletionBlock)tapBlock { UIAlertController *alertController = [self alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; if(cancelButtonTitle != nil) { UIAlertAction *cancelButton = [UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { tapBlock(alertController, ALERTACTION_CANCEL); // CANCEL BUTTON CALL BACK ACTION }]; [alertController addAction:cancelButton]; } if(otherButtonTitle != nil) { UIAlertAction *otherButton = [UIAlertAction actionWithTitle:otherButtonTitle style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { tapBlock(alertController, ALERTACTION_OTHER); // OTHER BUTTON CALL BACK ACTION }]; [alertController addAction:otherButton]; } [controller presentViewController:alertController animated:YES completion:nil]; return alertController; } @end

en su ViewController.m

[UIAlertController showAlertIn:self WithTitle:@"" message:@"" cancelButtonTitle:@"Cancel" otherButtonTitles:@"Other" tapBlock:^(UIAlertController *alertController, NSInteger index){ if(index == ALERTACTION_CANCEL){ // CANCEL BUTTON ACTION }else if(index == ALERTACTION_OTHER){ // OTHER BUTTON ACTION } [alertController dismissViewControllerAnimated:YES completion:nil]; }];

NOTA: Si desea agregar más de dos botones, agregue otro UIAlertAction más al UIAlertController.

He intentado varias formas de usar UIAlertController, en lugar de UIAlertView. Lo intenté de varias maneras pero no puedo hacer que la acción de alerta funcione. Aquí está mi código que funciona bien en IOS 8 e IOS 9, pero se muestra con banderas en desuso. Intenté la sugerencia elegante a continuación, pero no puedo hacer que funcione en este contexto. Necesito enviar mi aplicación y esto es lo último que debo abordar. Gracias por cualquier sugerencia adicional. Soy un novato

#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]; } }


Xcode 8 + Swift

Asumiendo self es un UIViewController :

func displayAlert() { let alert = UIAlertController(title: "Test", message: "I am a modal alert", preferredStyle: .alert) let defaultButton = UIAlertAction(title: "OK", style: .default) {(_) in // your defaultButton action goes here } alert.addAction(defaultButton) present(alert, animated: true) { // completion goes here } }


- (nulo) showAlert {

UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Title" message:"Message" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {}]; [alert addAction:defaultAction]; [self presentViewController:alert animated:YES completion:nil];

}

[self showAlert]; // Método de llamada


Desde iOS8, Apple proporciona una nueva clase UIAlertController que puede usar en lugar de UIAlertView, que ahora está en desuso, también se indica en el mensaje de desuso:

UIAlertView está en desuso. Utilice UIAlertController con un PreferredStyle de UIAlertControllerStyleAlert en su lugar

Entonces deberías usar algo como esto

UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"Title" message:@"Message" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* yesButton = [UIAlertAction actionWithTitle:@"Yes, please" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { //Handle your yes please button action here }]; UIAlertAction* noButton = [UIAlertAction actionWithTitle:@"No, thanks" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { //Handle no, thanks button }]; [alert addAction:yesButton]; [alert addAction:noButton]; [self presentViewController:alert animated:YES completion:nil];


La versión rápida de la nueva implementación es:

let alert = UIAlertController(title: "Oops!", message:"your message", preferredStyle: .Alert) alert.addAction(UIAlertAction(title: "Okay.", style: .Default) { _ in }) self.presentViewController(alert, animated: true){}


Mira esto:

UIAlertController *alertctrl =[UIAlertController alertControllerWithTitle:@"choose Image" message:nil preferredStyle:UIAlertControllerStyleActionSheet]; UIAlertAction *camera =[UIAlertAction actionWithTitle:@"camera" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { [self Action]; //call Action need to perform }]; [alertctrl addAction:camera]; -(void)Action { }


Probé los métodos anteriores, y nadie puede mostrar la vista de alerta, solo cuando puse el método presentViewController: en una oración dispatch_async :

dispatch_async(dispatch_get_main_queue(), ^ { [self presentViewController:alert animated:YES completion:nil]; });

¿Consulte Alternativa a UIAlertView para iOS 9? .


Use UIAlertController en lugar de UIAlertView

-(void)showMessage:(NSString*)message withTitle:(NSString *)title { UIAlertController * alert= [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){ //do something when click button }]; [alert addAction:okAction]; UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; [vc presentViewController:alert animated:YES completion:nil]; }


//Calling [self showMessage:@"There is no internet connection for this device" withTitle:@"Error"]; //Method -(void)showMessage:(NSString*)message withTitle:(NSString *)title { UIAlertController * alert= [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){ //do something when click button }]; [alert addAction:okAction]; UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; [vc presentViewController:alert animated:YES completion:nil]; }

Si desea usar esta alerta en la clase NSObject, debe usar como:

-(void)showMessage:(NSString*)message withTitle:(NSString *)title{ dispatch_async(dispatch_get_main_queue(), ^{ UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]]; [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:alertController animated:YES completion:^{ }]; }); }


UIAlertController * alert = [UIAlertController alertControllerWithTitle:@"Are you sure you want to logout?" message:@"" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* yesButton = [UIAlertAction actionWithTitle:@"Logout" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * action) { }]; UIAlertAction* noButton = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { //Handle no, thanks button }]; [alert addAction:noButton]; [alert addAction:yesButton]; [self presentViewController:alert animated:YES completion:nil];