67 votes

UIAlertView addSubview dans iOS7

L'ajout de contrôles à UIAlertView était obsolète dans iOS7 à l'aide de la méthode addSubview . Comme je le sais, Apple a promis d'ajouter contentView propriétés.

iOS 7 est disponible maintenant et je constate que cette propriété n'est pas ajoutée. C'est pourquoi je recherche une solution personnalisée avec la possibilité d'ajouter une barre de progression à cet alertView. Quelque chose par exemple similaire à TSAlertView , mais plus prêt à être utilisé dans iOS 7 .

55voto

Wimagguc Points 761

Voici un projet sur Github pour ajouter n'importe quel UIView à un dialogue ressemblant à UIAlertView sur iOS7.

Boîte de dialogue personnalisée iOS7 AlertView (Copié à partir de ce thread StackOverflow .)

35voto

Sulthan Points 23360

Il m'a fallu seulement 1 jour créer ma propre alerte de vue qui regarde exactement comme Apple

  1. Prendre une capture d'écran d'Apple alerte de référence (tailles de police, l'espacement, la largeur)
  2. Créer un xib avec le titre, message, affichage personnalisé et des tables pour les boutons (Apple utilise des tables au lieu de UIButton maintenant, par défaut d'une cellule de tableau est assez bon). Remarque vous devez bouton 3 tableaux: deux pour les boutons gauche et droit (lorsque le nombre de boutons 2), une autre pour les autres cas (un seul bouton, ou plus de 2 boutons).
  3. Mettre en œuvre toutes les méthodes d' UIAlertView sur votre alerte personnalisée.

  4. Afficher/Rejeter - vous pouvez créer un spécifique fenêtre modale pour vos alertes, mais je viens de mettre mes alertes sur le dessus de ma racine-vue-contrôleur. Inscrire vos alertes visibles d'un tableau statique. Si la première alerte/rejetant la dernière, changement de teinte de la mode de la fenêtre de votre/de-vue-contrôleur de grisé/automatique et ajouter/supprimer une gradation de vue (noir avec alpha = 0.2).

  5. Flous d'arrière-plan - utilisation d'Apple exemple de code (j'ai utilisé du blanc opaque)
  6. 3D effets dynamiques - l'utilisation d'Apple un exemple de code (5 lignes de code). Si vous voulez un effet agréable, légèrement plus grand instantané à l'étape 5 et ajouter inverse des animateurs pour alerter arrière-plan et de premier plan.

EDIT:

À la fois flous d'arrière-plan et l'effet paralax exemple de code peut être trouvé dans "iOS_RunningWithASnap" de la WWDC 2013 exemple de code

Paralax effet:

UIInterpolatingMotionEffect* xAxis = [[[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.x"
                                                                                     type:UIInterpolatingMotionEffectTypeTiltAlongHorizontalAxis] autorelease];
xAxis.minimumRelativeValue = [NSNumber numberWithFloat:-10.0];
xAxis.maximumRelativeValue = [NSNumber numberWithFloat:10.0];

UIInterpolatingMotionEffect* yAxis = [[[UIInterpolatingMotionEffect alloc] initWithKeyPath:@"center.y"
                                                                                     type:UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis] autorelease];
yAxis.minimumRelativeValue = [NSNumber numberWithFloat:-10.0];
yAxis.maximumRelativeValue = [NSNumber numberWithFloat:10.0];

UIMotionEffectGroup *group = [[[UIMotionEffectGroup alloc] init] autorelease];
group.motionEffects = @[xAxis, yAxis];
[self addMotionEffect:group];

L'arrière-plan flou est la seule chose compliquée. Si vous pouvez utiliser une couleur opaque au lieu de cela, utiliser. Sinon, c'est beaucoup d'expérimentation. Notez également que les flous d'arrière-plan n'est pas une bonne solution lorsque l'arrière-plan est sombre.

Pour le rejeter animationg, je suis en utilisant le nouveau printemps de l'animation de la méthode:

void (^animations)() = ^{
    self.alpha = 1.0f;
    self.transform = CGAffineTransformIdentity;
};

self.alpha = 0.0f;
self.transform = CGAffineTransformMakeScale(0.5f, 0.5f);

[UIView animateWithDuration:0.3
                      delay:0.0
     usingSpringWithDamping:0.7f
      initialSpringVelocity:0.0f
                    options:UIViewAnimationOptionCurveLinear
                 animations:animations
                 completion:^(BOOL completed) {
                         //calling UIAlertViewDelegate method
                     }];

32voto

Scott Berrevoets Points 8932

J'ai écrit une implémentation complète d'UIAlertView qui imite l'API UIAlertView complète, mais ajoute la propriété contentView que nous recherchions tous depuis si longtemps: SDCAlertView .

image

27voto

Eshwar Chaitanya Points 470

Pour ceux qui aiment les méthodes simples et efficaces sans avoir à écrire des lignes de code. Voici une solution intéressante sans utiliser d’autres travaux de cadre privés pour l’ajout de sous-vues aux vues d’alertes ios 7, c’est-à-dire

[alertView setValue: imageView forKey: @ "accessoireView"];

Exemple de code pour une meilleure compréhension,

 UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(180, 10, 85, 50)];
UIImage *wonImage = [UIImage imageNamed:@"image.png"];
[imageView setImage:wonImage];

//check if os version is 7 or above
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
      [alertView setValue:imageView forKey:@"accessoryView"];
}else{
      [alertView addSubview:imageView];
}
 

J'espère que ça aide quelqu'un, merci :)

17voto

Ganesh manoj Points 181

Pour IOS7

 UIAlertView *alertView1 = [[UIAlertView alloc] initWithTitle:@"Enter Form Name" 
                                               message:@""
                                               delegate:self 
                                               cancelButtonTitle:@"Cancel"
                                               otherButtonTitles:@"Ok", nil];
alertView1.alertViewStyle = UIAlertViewStyleSecureTextInput;
UITextField *myTextField = [alertView1 textFieldAtIndex:0];
[alertView1 setTag:555];
myTextField.keyboardType=UIKeyboardTypeAlphabet;

[alertView1 show];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X