Domanda

Il protocollo UIAlertviewDelegate ha diversi metodi opzionali tra cui:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;

Questo sembrerebbe suggerire che non tutti i clic sui pulsanti in realtà respingere la visualizzazione degli avvisi. Tuttavia non vedo alcun modo di configurare la vista avviso a non respingere automaticamente con qualsiasi premere il pulsante.

Devo creare una sottoclasse per raggiungere questo obiettivo?

Perché il protocollo UIAlertViewDelegate avere:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex;
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex

E

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;

Se non ha opzionalmente supporta non respinge la vista avviso ad ogni scatto del tasto?

Brief parte: Mi rendo conto che quello che è stato progettato per UIAlertView. Ma il mio scopo è quello di consentire all'utente di copiare un testo alla scheda di pasta prima le uscite app (che avviene automaticamente quando la visualizzazione degli avvisi è respinto.

È stato utile?

Soluzione

Sì. UIAlertView sottoclasse e quindi sovraccaricare -dismissWithClickedButtonIndex:animated:, per es.

@implementation MyAlertView 
-(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated {
   if (buttonIndex should not dismiss the alert)
      return;
   [super dismissWithClickedButtonIndex:buttonIndex animated:animated];
}
@end

Ufficiosamente è possibile definire una

-(void)alertSheet:(UIAlertSheet*)sheet buttonClicked:(id)button;

metodo al delegato che renderà bypassare -dismissWithClickedButtonIndex:animated:, ma è non documentato , quindi non so se è adatto per voi.

Altri suggerimenti

willPresentAlertView:, didPresentAlertView:, alertView:willDismissWithButtonIndex: e alertView:didDismissWithButtonIndex: sono per il monitoraggio l'inizio e la fine delle animazioni di UIAlertView.

Le applicazioni che non hanno bisogno di tenere traccia delle animazioni di UIAlertView può semplicemente utilizzare alertView:clickedButtonAtIndex:. La documentazione per il metodo che dicono "il ricevitore è respinto automaticamente dopo questo metodo viene richiamato."

A mio parere: Non c'è alcun motivo per tenere alertView. Anche se vuoi tenerlo, basta pensare a "ri-show" che, mantenendo un riferimento, quindi chiamare [spettacolo alertView] ==> NON OCCORRE sottoclasse NULLA . Buone notizie, eh?

  

ATTENZIONE

     

Da alcune fonti Ho sentito dire che alcune app hai respinto   Seguendo questo processo. Sono stato fortunato nel mio caso durante iOS6 quindi sono   mostrando il codice qui. Utilizzare a proprio rischio: - /

Subclassing è il modo migliore. Creare una bandiera bool per l'avviso deve rimanere o meno.

Questa è la sottoclasse di UIAlertView

//
//  UICustomAlertView.h
//

#import <UIKit/UIKit.h>

@interface UICustomAlertView : UIAlertView
{

}
@property(nonatomic, assign) BOOL dontDisppear;
@end

//
//  UICustomAlertView.m
//

#import "UICustomAlertView.h"

@implementation UICustomAlertView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated {

    if(self.dontDisppear)
        return;
    [super dismissWithClickedButtonIndex:buttonIndex animated:animated];
}
@end

E questo è come l'ho usato nel mio codice

if(![txtUsername.text isEqualToString:@"admin"] && ![txtPassword.text isEqualToString:@"admin"])
{
     alertLogin.dontDisppear = YES;
     alertLogin.message = NSLocalizedString(@"my_alert", nil);
}
else
{
     alertLogin.dontDisppear = NO;
     // proceed
}
#import "MLAlertView.h"

@implementation MLAlertView


-(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated {
}

-(void)dismissNow:(NSInteger)buttonIndex  {
     [super dismissWithClickedButtonIndex:buttonIndex animated:YES];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top