Frage

Das UIAlertviewDelegate Protokoll mehrere optionale Methoden hat, einschließlich:

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

Dies scheint darauf hinzudeuten nicht alle Tastenklicks tatsächlich die Alarmansicht entlassen. Allerdings sehe ich keine Möglichkeit, den Alarm Ansicht der Konfiguration NICHT automatisch mit jedem Tastendruck zu schließen.

Muss ich eine Unterklasse erstellen, dies zu erreichen?

Warum sollte das UIAlertViewDelegate Protokoll hat:

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

und

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

Wenn es nicht optional nicht unterstützen mit jeder Taste, um den Alarm Ansicht entläßt?

Kurz Abgesehen: Ich weiß, was UIAlertView entworfen wurde. Aber mein Ziel ist es dem Benutzer zu erlauben, einen Text zu der Paste Bord, bevor die App Ausfahrten zu kopieren (was automatisch geschieht, wenn der Alarm Ansicht des Feldes verwiesen.

War es hilfreich?

Lösung

Ja. Subclass UIAlertView und dann überlasten -dismissWithClickedButtonIndex:animated:, z.

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

Inoffiziell Sie können ein

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

Methode zu den Delegierten, die es Bypass -dismissWithClickedButtonIndex:animated: machen werden, aber es ist ohne Papiere , damit ich weiß nicht, ob es für Sie geeignet ist.

Andere Tipps

willPresentAlertView:, didPresentAlertView:, alertView:willDismissWithButtonIndex: und alertView:didDismissWithButtonIndex: sind für die Verfolgung der Anfang und das Ende UIAlertView Animationen.

Anwendungen, die nicht brauchen einfach UIAlertView Animationen zu verfolgen alertView:clickedButtonAtIndex: nutzen können. Die Dokumentation für diese Methode sagen „der Empfänger automatisch entlassen, nachdem diese Methode aufgerufen wird.“

Meiner Meinung: Es gibt keinen Grund Alertview zu halten. Auch wenn Sie es behalten wollen sie zu, man denke nur an "re-show" es, durch einen Verweis zu halten, rufen Sie [Alertview zeigen] ==> NO NEED TO SUBCLASS ANYTHING . Eine gute Nachricht, nicht wahr?

  

ACHTUNG:

     

Von einigen Quellen Ich habe gehört, dass einige App abgelehnt wurde   nach diesem Verfahren. Ich war in meinem Fall bei iOS6 Glück also bin ich   zeigt Code hier. Die Nutzung erfolgt auf eigenes Risiko: - /

Subclassing ist der beste Weg. Erstellen Sie eine bool Flagge für wachsam bleiben soll oder nicht.

Dies ist die Unterklasse von 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

Und das ist, wie ich es in meinen Code verwendet

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];
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top