Tengo una aplicación en la tienda iTunes, que muestra algunos UILabel y UIWebView en UIAlertView. De acuerdo a la sesión de vídeo, addSubView para UIAlertView no funcionará. Se ha hablado sobre el ContentView. Pero en las Semillas GM SDK, no podía encontrar la propiedad y parece ser que no hay otra manera.

La única cosa que puedo hacer es crear una subclase personalizada de UIView y hacer que funcione como UIAertView. Puedes sugerir cualquier otra solución sencilla?

Gracias por la ayuda.

  • En versiones antiguas de iOS, usted podría subclase UIAlertView para conseguir el efecto deseado. Pero hasta ahora esto ha mencionado contentView ha estado ausente en todos los comunicados de 🙁
  • Es posible que desee preguntar en desarrolladores de Apple, como los foros de iOS7 todavía está cubierto por un acuerdo de confidencialidad.
  • Echa un vistazo aquí stackoverflow.com/questions/18895106/…
  • Trabajando como un encanto stackoverflow.com/a/25176086/2459296
InformationsquelleAutor Apurv | 2013-09-12

6 Comentarios

  1. 102

    Usted realmente puede cambiar accessoryView a customContentView en iOS7 (y parece que en iOS8 así) UIAlertView

    [alertView setValue:customContentView forKey:@"accessoryView"];

    Prueba este código:

    UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"TEST" message:@"subview" delegate:nil cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 40)];
    [av setValue:v forKey:@"accessoryView"];
    v.backgroundColor = [UIColor yellowColor];
    [av show];

    Recuerde que usted necesita configurar de forma personalizada accessoryView antes de la llamada [alertView mostrar]

    Cómo agregar subvista dentro de UIAlertView para iOS 7?

    • Esta respuesta debería ser aceptado..
    • Verificación de la versión de IOS para el regreso de compatibilidad de otra manera [av setValue:v forKey:@»accessoryView»]; se bloquee la aplicación
    • Esta pregunta y la respuesta es para iOS 7 solo. Pero de todos modos gracias por la observación.
    • Bonita explicación. su trabajo para mí. gracias.
    • ¿Alguien no se si esto ha sido rechazada por apple?
    • Muy probable que sea rechazada por Apple, por lo tanto downvoting.
    • Creo que es más honestamente a voto sólo después de ciertos rechazar…
    • Yo uso este en producción de las aplicaciones. Sin embargo, en iOS8 ya no funciona.
    • Han tratado de profundizar en el problema? ¿AccessoryView todavía existen?
    • todavía no, acabo de descubrir hoy. Voy a publicar aquí cuando puedo encontrar una solución.
    • No creo que hay una manera de hacer algo como esto. Voy a cambiar todos mis personalizado UIAlertViews a SDCAlertView
    • Lo que realmente funciona en iOS 8 aquí. Al menos la configuración de la accessoryView. Pero conseguir de nuevo tendrá un accidente. No estoy seguro de si me gustaría confiar en que el comportamiento es un hack, y siempre lo ha sido…
    • Bueno, funciona en iOS 8, pero no centrado su punto de vista. Tienes que hacerlo por ti mismo. Y sí, como dijo Eiko se bloquea si intenta obtener la vista llamando valueForKey:. Pero si tienes por ejemplo una barra de progreso en la vista, usted puede tener una variable global para él y va a funcionar bien.
    • Soluciones para llamar valueForKey en iOS 8?
    • maravilloso, gracias
    • para mí funciona en iOS8, pero no puedo cambiar el lugar de mi vista. Alguna solución?? gracias
    • Falla al llamar [alertView valueForKey:ALERT_EDIT]; en IOS8
    • ¿qué es ALERT_EDIT?
    • @malex @»accessoryView»
    • Gank has encontrado ¿por qué es el bloqueo en ios 8?
    • No quiero que se bloquee el partido, pero de esta forma se rompe la interfaz. No es compatible. Si un usuario tiene más grande o más pequeño el texto que se establece en los Ajustes de Accesibilidad, el texto de la alerta de vista se ve afectada, y se convierte en cubierta.
    • y en Swift?

  2. 10

    AddSubview no es posible a partir de iOS 7.

    La única manera es crear una personalizada UIView subclase que pueden actuar como UIAlertView. He podido averiguar algunos componentes en Github.

    La enlazado una Alerta Personalizada parece funcionar bien. Por poner la versión correcta marque uno puede identificar a ir para los nativos de UIAlertView o CustomAlertView.

  3. 3

    La adición de una subvista a un UIAlertView es diferente en iOS7 de las anteriores versiones de iOS. Intentar algo como esto:

    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        [myAlertView setValue:myCustomView forKey:@"accessoryView"]; //works only in iOS7
    } else {
        myAlertView.message = @"\n"; //or just add \n to the end of the message (it's a workaround to create space inside the alert view
        [myAlertView addSubview:myCustomView];
    }
    
    [myAlertView show]; //show the alert AFTER CUSTOMIZATION  
  4. -1

    Piensa que va a obtener ayuda también si usted lo usa 🙂

    syncProgressBarView = [[UIProgressView alloc]initWithProgressViewStyle:UIProgressViewStyleDefault];
    syncProgressBarView.frame =CGRectMake(20, 55, 250, 20);
    [syncProgressBarView setProgress:0.0f animated:NO];
    syncProgressBarView.backgroundColor =[UIColor clearColor];
    [progressView addSubview:syncProgressBarView];

    Hacer una nueva vista para el sub-visualización de UIProgressView

    progressView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, DeviceWidth, 100)];
    [[UIApplication sharedApplication].keyWindow addSubview:progressView];
    progressView.backgroundColor = [UIColor clearColor];
    progressView.center = [UIApplication sharedApplication].keyWindow.center;
    syncProgressBarView.frame = CGRectMake(progressView.frame.size.width/2 - 250/2, progressView.frame.size.height/2 - 10, 250, 20);
    [[UIApplication sharedApplication].keyWindow bringSubviewToFront:[progressView superview]];

    Una cosa más que tiene que hacer…

    dispatch_async(dispatch_get_main_queue(), ^{
                    [self updateProgressBar];
                });
  5. -2

    La costumbre de alerta de ver en github vinculados en el aceptado la respuesta es excelente. Sin embargo, no se puede iniciar directamente desde el método viewdidload. El adjuntando UIView se adjunta a la aplicación de la primera ventana, así que tienes que esperar una fracción de segundo. He añadido este código viewdidload que he encontrado como un asunto cerrado.

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
          //Open the dialog here
       });
  6. -9

    Una solución es subclase UIAlertView y detectar los «_UIModalItemAlertContentView» ver.
    Mi AlertView había un UITextField, así que utiliza para detectar la vista de contenido :

    - (void)show
    {
        [ super show ];
        UIView *contentView=nil;
        if([[[UIDevice currentDevice] systemVersion] floatValue ] < 7.0f)
        {
            contentView=self;
        } else {
            UIView *rootView=[self textFieldAtIndex:0];
            while((rootView=[rootView superview])!=nil)
            {
                if([ NSStringFromClass([rootView class]) isEqualToString:@"_UIModalItemAlertContentView"])
                {
                    contentView=rootView;
                    break;
                }
            }
        }
    
        if(contentView!=nil)
        {
            [ contentView addSubview: ... ];
        }
    }
    • NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO usted nunca debe subclase UIAlertView consulte la sección "Subclassing notes" (developer.apple.com/library/ios/documentation/uikit/reference/…) – "The UIAlertView class is intended to be used as-is and does not support subclassing. The view hierarchy for this class is private and must not be modified." esto va a tener su aplicación rechazado desde la app store -1

Dejar respuesta

Please enter your comment!
Please enter your name here