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.
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.
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];
}
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];
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:
sous iOS 8, vous devez remplacer UIAletrview
et UIActionSheet
par UIAlertcontroller
. Vous lisez d'abord Cette documentation sur le forum Apple
Apple Alertcontroller
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];
}
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)