Quiero despedir UIAlertView en cualquier lugar fuera de ella con un solo toque. Quiero mostrar un UIAlertView sin ningún botón.

He estándar UIAlertView códigos de aquí, pero necesito ideas para descartarla, si es posible.

Con UITouch? Con UITapGestureRecognizer?

Gracias.


EDICIÓN:

en viewDidLoad

alertview de inicialización aquí con el nombre de «alerta»

     if (alert)
     {
    emptyview = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,480)];
    emptyview.backgroundColor = [UIColor clearColor];
    [self.view addSubview:emptyview];
         [emptyview addSubview:alert];
    NSLog (@"emptyview is there!");

         UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
         [emptyview addGestureRecognizer:singleTap];
         [singleTap release];            
     }

Pero este emptyview no no responde en lo absoluto y que no responde a handleSingleTap selector, que reescribí un poco:

-(void)handleSingleTap:(UITapGestureRecognizer *)sender{
    [alert dismissWithClickedButtonIndex:0 animated:YES];
    [emptyview removeFromSuperview];
}

Necesito este emptyview estar en alerta cuando la alerta se muestra a continuación, me pueden despedir a un alerta con un solo toque.

He intentado:

     if (alert)
     {
    emptyview = [[UIView alloc]initWithFrame:CGRectMake(0,0,320,480)];
    emptyview.backgroundColor = [UIColor clearColor];
    [self.view addSubview:emptyview];
         [emptyview addSubview:alert];
    NSLog (@"emptyview is there!");

         UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
         [alert addGestureRecognizer:singleTap];
         [singleTap release];            
     }

De curso, alerta respondió a handleSingleTap función. ¿Qué hice de malo con emptyview?


SEGUNDA EDICIÓN:

Lo que quiero lograr en este caso es mostrar una pequeña vista con la explicación después de seleccionar una palabra, una función similar en la aplicación de Kindle, si usted tiene uno.
Tal vez debería crear una UIView en lugar de UIAlertView? Pero la pequeña vista en la aplicación de Kindle es tan agradable a la sombra debajo de él, ¿cómo es posible?

OriginalEl autor wagashi | 2011-11-24

2 Comentarios

  1. 10

    Parece que son esencialmente tratando de recrear un «Brindis» en iOS. Buena noticia, alguien ya lo ha hecho. Ver este proyecto.

    Edición: no desea utilizar iToast. Me gusta su estilo, menos código. Aquí es lo que se me ocurre. Parece obvio, como otros han dicho que la única manera de superar el valor modal de la naturaleza de la UIAlertView es agregar un superview a manejar eventos de toque. Pero usted no tiene que hacerlo manualmente cada vez, considere la posibilidad de crear subclases de UIAlertView. Intentar algo como esto:

    Edición: @wagashi, Gracias por aceptar mi respuesta, y gracias por el aviso sobre setFrame: ser un buen lugar para ajustar el tamaño. El código hace una muy tostado poco alerta, sin embargo cuando lo probé me pareció que si el mensaje era de largo el punto de vista parecía caerse a pedazos. Así que he modificado setFrame: simplemente reducir el tamaño de la alerta por aproximadamente el tamaño de un botón, y permanecer centrado en la pantalla. Para que la clase de precisión de las respuestas a la pregunta título de «iOS Cómo descartar UIAlertView con un solo toque en cualquier lugar?»

    NoButtonAlertView.h

    #import <UIKit/UIKit.h>
    @interface _NoButtonAlertViewCover : UIView
    @property (nonatomic,assign) UIAlertView *delegate;
    @end
    @interface NoButtonAlertView : UIAlertView
    -(id)initWithTitle:(NSString *)title message:(NSString *)message;
    @end

    NoButtonAlertView.m

    #import "NoButtonAlertView.h"
    @implementation _NoButtonAlertViewCover
    @synthesize delegate = _delegate;
    -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
        [self removeFromSuperview];
        [_delegate dismissWithClickedButtonIndex:0 animated:YES];
    }
    @end
    @implementation NoButtonAlertView
    -(void)show{
        [super show];
        _NoButtonAlertViewCover *cover = [[_NoButtonAlertViewCover alloc] initWithFrame:[UIScreen mainScreen].bounds];
        cover.userInteractionEnabled = YES;
        cover.backgroundColor = [[UIColor lightGrayColor] colorWithAlphaComponent:.01];
        cover.delegate = self;
        [self.superview addSubview:cover];
    }
    -(id)initWithTitle:(NSString *)title message:(NSString *)message{
        if ((self = [super initWithTitle:title message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:nil, nil])){
        }
        return self;
    }
    - (void)setFrame:(CGRect)rect {
        //Called multiple times, 4 of those times count, so to reduce height by 40
        rect.size.height -= 10;
        self.center = self.superview.center;
        [super setFrame:rect];
    }
    @end

    Con este sencillo UIAlertView subclase y su UIView subclase de una cubierta, se puede utilizar como simplemente como una norma UIAlertView. Así:

    NoButtonAlertView *alert = [[NoButtonAlertView alloc] initWithTitle:@"Hello" message:@"I am the very model of a modern major general; I'm information, vegitable, animal, and mineral."];
    [alert show];

    Producirá:

    iOS Cómo descartar UIAlertView con un solo toque en cualquier lugar?

    Um, mi objetivo no es hacer o utilizar una vista hecha de complicado y largo de los códigos. Este iToast es realmente genial, pero me pregunto si es posible hacer un largometraje con menos códigos? Gracias por compartir este enlace con nosotros.
    este fue enormemente útil! He añadido en .m : ` – (void)setFrame:(CGRect)rect { //[super setFrame:CGRectMake(0, 0, rect.tamaño.de ancho, 300)]; [super setFrame:CGRectMake(0, 0, 100, 100)]; //el código siguiente hace UIAlertView estar centrado. //auto.centro = CGPointMake(320/2, 480/2); //mi costumbre cgpointmake auto.centro = CGPointMake(200, 400); }`
    Sí, sí, has contestado a mi pregunta. Sin embargo no voy a poner toda la información en mi «alerta», por lo que CGRectMake 0,0,100,100 es perfecto en mi caso. Me pregunto si es posible cambiar el tamaño de fuente del texto en el interior de UIAlertView?
    y su otra solución para CGRectMake también es útil, gracias de nuevo.
    Alerta vista no parece ser despedidos con ios 7 🙁

    OriginalEl autor NJones

  2. 3

    Después de mostrar UIAlertView añadir a su vista controlador (o incluso de la ventana) vacío de la nueva UIView con tamaño de pantalla completa. Adjuntar a este wiew UITapGestureRecognizer

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    [view addGestureRecognizer:singleTap];
    [singleTap release];

    Ahora en handleSingleTap método puede cerrar UIAlertView y eliminar esta vista desde la ventana

    -(void)handleSingleTap:(UITapGestureRecognizer *)sender{
        [myAlert dismissWithClickedButtonIndex:0 animated:YES];
        [view removeFromSuperView];
    }
    Me gustaría añadir un custom UIButton con ningún texto o imagen
    Sí, buena idea. Se salva de la escritura de varias líneas de código. En cualquier caso, usted necesita para manejar toque de acción.
    Por curiosidad, ¿por qué usar un UIAlertView? Poner en pantalla completa UIButton delante de todos los otros puntos de vista, con lo que el texto y el fondo de color w/ alpha te gusta (o conseguir más elegante).
    Que es buena idea. Pero creo que creo que no es muy lógico, por favor ver mi edición.
    Que también es una buena idea. Yo soy un poco mucho más de lo que principiantes. Por favor, ver mi segunda edición de lo que quiero lograr.

    OriginalEl autor beryllium

Dejar respuesta

Please enter your comment!
Please enter your name here