web-dev-qa-db-fra.com

iOS 8: UIAlertView/UIAlertController n'affichant pas de texte ni de boutons

J'ai un UIAlertView qui se montre parfaitement dans iOS 7 mais dans iOS 8, il ne montre aucun bouton ou étiquette. L'alerte est toujours visible, mais il ne s'agit que d'une petite boîte blanche . Les boutons OK et Annuler prennent également en compte leurs événements, mais aucun texte n'est visible.

J'ai utilisé cette alerte pour afficher en cliquant sur un bouton

- (IBAction)sel_btnLogout:(id)sender {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Logout!" message:@"Are you sure you want to logout?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
    [alert show];
}

J'ai vérifié le cadre dans iOS 8: il donne (0,0,0,0) mais dans iOS 7, il donne une valeur définie.

J'ai également vérifié s'il y avait itération dans les sous-vues de uialertview. Dans iOS7, il va dans la boucle, car il trouve les sous-vues de l'alerte. Dans iOS8, il est indiqué qu’il n’existe pas de sous-vues de alertView.

11
Siddhant

J'ai eu la réponse à mon problème. Le problème était que j'utilisais la catégorie UIFont + Replacement dans mon projet. Cela fonctionnait très bien sur iOS 7, mais sur iOS 8, il utilisait peu de méthodes obsolètes. Pour cette raison, je ne sais pas pourquoi, mais seule la vue alerte ne montrait aucun libellé.

Solution: Supprimez la catégorie du projet et définissez la police par xib. Une fois que nous avons placé le fichier .tff de n’importe quelle police dans notre espace de travail, nous voyons ces noms de polices dans xib sous des polices personnalisées. PAS BESOIN D'UTILISER UIFont + catégorie de remplacement.  

4
Siddhant

Vérifiez si le cours est disponible

if ([UIAlertController class])
{

    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Alert title" message:@"Alert message" preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
    [alertController addAction:ok];

    [self presentViewController:alertController animated:YES completion:nil];

} 
else 
{

    UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"Alert title" message:@"Alert message" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

    [alert show];

}
29
Vijay yadav

Avec iOS 8, vous pouvez définir le titre au lieu du message:

[[[UIAlertView alloc] initWithTitle:@"AlertView in iOS 8." message:nil delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]show];

UIAlertView est obsolète pour iOS 8 pour plus d'informations, visitez cette page

http://nshipster.com/uialertcontroller/ . https://developer.Apple.com/LIBRARY/IOS/documentation/UIKit/Reference/UIAlertViewDelegate_Protocol/index.html

Donc, si vous allez écrire un code séparé pour iOS 7 et iOS 8, vous devriez plutôt utiliser UIAlertController: 

UIAlertController *alertController = [UIAlertController  alertControllerWithTitle:@"AlertView in iOS 8"  message:nil  preferredStyle:UIAlertControllerStyleAlert];
[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
 [self dismissViewControllerAnimated:YES completion:nil];
}]];
[self presentViewController:alertController animated:YES completion:nil];
12
Ricky

Veuillez lire le code ci-dessous pour comprendre comment ajouter les champs et les boutons aux alertes.

- (IBAction)UIAlertControllerWithActionSheetTextFields:(id)sender {
    UIAlertController * alert=   [UIAlertController
                                  alertControllerWithTitle:@"Info"
                                  message:@"You are using UIAlertController with Actionsheet and text fields"
                                  preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction* ok = [UIAlertAction
                         actionWithTitle:@"OK"
                         style:UIAlertActionStyleDefault
                         handler:^(UIAlertAction * action)
                         {
                             NSLog(@"Resolving UIAlert Action for tapping OK Button");
                             [alert dismissViewControllerAnimated:YES completion:nil];
                             
                         }];
    UIAlertAction* cancel = [UIAlertAction
                             actionWithTitle:@"Cancel"
                             style:UIAlertActionStyleDefault
                             handler:^(UIAlertAction * action)
                             {
                                 NSLog(@"Resolving UIAlertActionController for tapping cancel button");
                                 [alert dismissViewControllerAnimated:YES completion:nil];
                                 
                             }];
    
    [alert addAction:ok];
    [alert addAction:cancel];
    
    [alert addTextFieldWithConfigurationHandler:^(UITextField * textField) {
       textField.accessibilityIdentifier = @"usernameTextField";
        textField.placeholder = @"Enter your username";
        textField.accessibilityLabel = @"usernameLabel";
    }];
    
    [alert addTextFieldWithConfigurationHandler:^(UITextField * textField) {
       textField.placeholder = @"Enter your password";
       textField.accessibilityIdentifier = @"paswordTextField";
       textField.accessibilityLabel = @"passwordLabel";
    }];
    
    [self presentViewController:alert animated:YES completion:nil];
    
}

et si vous avez besoin d'un projet pour référencer complètement les types d'alertes disponibles dans IOS, suivez mon projet à partir de l'URL ci-dessous:

Variations d'alerte dans IOS

3
DILIP KOSURI

sous iOS 8, vous devez remplacer UIAletrview et UIActionSheet par UIAlertcontroller. Vous lisez d'abord Cette documentation sur le forum Apple 
Apple Alertcontroller

2
Apple Insider

Vous pouvez vérifier ce code

if (([[[UIDevice currentDevice] systemVersion] compare:@"8.0" options:NSNumericSearch] == NSOrderedAscending))
{
    // use UIAlertView
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:Title message:desc delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
    [alert show];
}
else {
    // use UIAlertController
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:Title message:desc preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

    }];
    [alert addAction:okAction];
    [self presentViewController:alert animated:YES completion:nil];
}
1
saraman
let alert = UIAlertController(title: "Warning" as String , message: messageString as String, preferredStyle: .Alert)
        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default)
        {
            UIAlertAction in
                self.dismissViewControllerAnimated(true, completion: nil)
        }
        // Add the actions
        alert.addAction(okAction)
        self.presentViewController(alert, animated: true, completion: nil)
0
Nrv