2010-01-12 14 views
27

UIAlertviewDelegate प्रोटोकॉल सहित कई वैकल्पिक तरीकों गया है। हालांकि मुझे किसी भी बटन प्रेस के साथ स्वचालित रूप से खारिज न करने के लिए अलर्ट व्यू को कॉन्फ़िगर करने का कोई तरीका नहीं दिखता है।यह संभव खारिज नहीं करने के लिए एक UIAlertView

क्या मुझे इसे पूरा करने के लिए उप-वर्ग बनाना है?

UIAlertViewDelegate प्रोटोकॉल क्यों होता है:

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

और

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

यह वैकल्पिक रूप से क्लिक करें प्रत्येक बटन के साथ चेतावनी दृश्य को खारिज नहीं का समर्थन नहीं किया है?

संक्षेप में: मुझे एहसास है कि UIAlertView के लिए क्या डिज़ाइन किया गया था। लेकिन मेरा उद्देश्य उपयोगकर्ता (एप्लिकेशन रास्ते से पहले पेस्ट बोर्ड के लिए कुछ पाठ को कॉपी करने के जो स्वचालित रूप से होता है जब चेतावनी दृश्य खारिज किया जाता है की अनुमति के लिए

उत्तर

27

जैसे

@implementation MyAlertView 
-(void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated { 
    if (buttonIndex should not dismiss the alert) 
     return; 
    [super dismissWithClickedButtonIndex:buttonIndex animated:animated]; 
} 
@end 
है। हाँ। उपवर्ग UIAlertView और फिर -dismissWithClickedButtonIndex:animated: ओवरलोड,

अनाधिकारिक आप डेल के लिए एक

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

विधि परिभाषित कर सकते हैं उदाहरण के लिए जो इसे -dismissWithClickedButtonIndex:animated: बाईपास कर देगा, लेकिन यह अनियंत्रित है, इसलिए मुझे नहीं पता कि यह आपके लिए उपयुक्त है या नहीं।

+0

जो कुछ मैं अब कर रहा हूं। लेकिन उपलब्ध प्रतिनिधि तरीकों के कारण, ऐसा लगता है कि मुझे ऐसा नहीं करना चाहिए। ओह ठीक है ... –

+0

एक अनियंत्रित विधि है (परीक्षण नहीं किया गया है), संपादन देखें। – kennytm

+0

हम्म ... दिलचस्प। बहुत खराब वे अनियंत्रित एपीआई का उपयोग करने पर टूट गए हैं। –

3

willPresentAlertView:, didPresentAlertView:, alertView:willDismissWithButtonIndex:, और alertView:didDismissWithButtonIndex: प्रारंभ और UIAlertView के एनिमेशन के अंत नज़र रखने के लिए कर रहे हैं।

उन अनुप्रयोगों जिन्हें UIAlertView के एनिमेशन को ट्रैक करने की आवश्यकता नहीं है, बस alertView:clickedButtonAtIndex: का उपयोग कर सकते हैं। उस विधि के लिए दस्तावेज़ कहते हैं, "इस विधि को लागू करने के बाद रिसीवर स्वचालित रूप से खारिज कर दिया जाता है।"

+0

धन्यवाद, मुझे दस्तावेज़ों में टेक्स्ट का आखिरी टुकड़ा याद आया। अभी भी उस अतिरिक्त विधि के लिए ओवरकिल की तरह लगता है, क्योंकि यह अनिवार्य रूप से वही होगा जैसा कि प्रतिनिधि होगा ... –

+0

@ डैरेन: आईओएस 7 अलर्ट में धन्यवाद और बहुत कुछ देखें: WillDismissWithButtonIndex: यह विधि दो बार कॉल करें। लेकिन आपका समाधान मेरा दिन बचाता है .. – TamilKing

1

चेतावनी

कुछ सूत्रों से मैंने सुना है कि कुछ अनुप्रयोग इस प्रक्रिया के बाद को अस्वीकार कर दिया गया है। मैं आईओएस 6 के दौरान अपने मामले में भाग्यशाली था इसलिए मैं यहां कोड दिखा रहा हूं। अपने जोखिम पर प्रयोग करें: -/

सबक्लासिंग सबसे अच्छा तरीका है। चेतावनी के लिए bool ध्वज बनाना चाहिए या नहीं।

यह 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 

के उपवर्ग है और यह है कि मैं कैसे यह मेरी कोड

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

मैंने 1 दिया है, "यूआईएलर्टव्यू क्लास के कारण होने का कारण उप-वर्गीकरण का समर्थन नहीं करता है। इस वर्ग के लिए दृश्य पदानुक्रम निजी है और जरूरी है https://developer.apple.com/library/ios/documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html में संशोधित नहीं किया जा सकता है, इसलिए आपके तरीके को कार्यान्वित करना ऐप्पल दस्तावेज़ीकरण और समीक्षा प्रक्रिया के खिलाफ होगा उनके ऐप को खारिज कर दिया। यह कुछ सालों से अब तक रहा है, इसलिए आपके जवाब देने के समय यह गलत जवाब होगा। – Popeye

+0

हो सकता है लेकिन मेरा ऐप पिछले साल स्वीकृत हो (आईओएस 6)। –

+0

क्षमा करें, लेकिन इसका मतलब यह नहीं है कि यह सही है। इससे पहले कि मैं इसके बारे में भी जानता था, मैंने एक ऐप सबमिट किया और प्रारंभिक समीक्षा प्रक्रिया के माध्यम से इसे हटा दिया गया, जब मैंने एक अपडेट सबमिट किया तो अस्वीकार कर दिया गया। ऐप्पल समीक्षा टीम केवल मानव हैं, वे चीजों को याद कर सकते हैं। हालांकि मुझे पता है कि हालांकि वे आईओएस 7 के साथ अधिक सख्त हैं। हालांकि मेरा -1 पूरी तरह से था क्योंकि यह जवाब ऐप्पल दस्तावेज के खिलाफ चला जाता है और आप इसकी चेतावनी नहीं देते हैं। यदि आप इसकी चेतावनी देते हैं तो मैं खुशी से अपने -1 – Popeye

1
#import "MLAlertView.h" 

@implementation MLAlertView 


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

-(void)dismissNow:(NSInteger)buttonIndex { 
    [super dismissWithClickedButtonIndex:buttonIndex animated:YES]; 
} 
2

मेरी राय में में इस्तेमाल किया: वहाँ रखने के लिए कोई कारण नहीं है alertView। यहां तक ​​कि यदि आप इसे रखना चाहते हैं, तो बस संदर्भ को रखकर "पुनः दिखाएं" के बारे में सोचें, फिर [सतर्क दृश्य शो] ==>को पर किसी भी चीज़ को सब्सक्राइब करने की आवश्यकता नहीं है। अच्छी खबर, हुह?

+0

हटा दिया है यह काम करता है। यद्यपि आप पॉपअप को फिर से चलाते समय थोड़ा सा झिलमिलाहट करते हैं। – RajV

संबंधित मुद्दे