2013-01-10 19 views
12

मैं एक दो है और 2 maincontroller, जहां मैं ढेर में maincontroller धक्का कर रहा हूँ, इसलिए वापस बटन स्वचालित रूप से आ रहा है है।UINavigationController और वापस बटन कार्रवाई

यहां उपयोगकर्ता को बैक बटन दबाते समय अलर्ट करने की आवश्यकता है।

मैं यह कैसे कर सकता हूं?

उत्तर

20

या आप UINavigationController के प्रतिनिधि विधियों का उपयोग कर सकते हैं। विधि willShowViewController को तब कहा जाता है जब आपके वीसी का बैक बटन दबाया जाता है।

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated; 
+0

शानदार @ सेठेश्वरन, बिल्कुल वही है जो मैं चाहता हूं .... –

+1

इसके अलावा मैं क्या चाहता था। :-) रिकॉर्ड के लिए, आपको उस दृश्य नियंत्रक पर प्रोटोकॉल को लागू करने की आवश्यकता है जिसे आप वापस नेविगेट करते हैं। – doekman

+0

यह समाधान महान काम करता है और सबसे कुशल है। सुनिश्चित करें कि आपके नेविगेशन कंट्रोलर प्रतिनिधि का कनेक्शन है - (शून्य) viewDidAppear: (BOOL) एनिमेटेड, अन्यथा चेतावनी तब भी दिखाई देती है जब पहला व्यू कंट्रोलर पहली बार लॉन्च होता है। –

0

एक कस्टम एक कार्रवाई के साथ बटन वापस जोड़ सकते हैं और है कि कार्रवाई में अपने चेतावनी सेट method.You यहां से अपने कस्टम वापस बटन जोड़ सकते हैं: http://www.applausible.com/blog/?p=401

-1

एक बटन बना सकते हैं और इस प्रकार बटन कार्रवाई दे।

[self alert]; 

और जब चेतावनी प्रदर्शित किया जाता है, हाँ

[self.navigationController popViewController]; 
इस के बाद

,

self.navigationController.LeftBarButton = myButton; 

से अधिक दोहन के बाद इस

+0

के लिए अलर्ट क्या है? – richy

+1

@richy इस पुरानी उत्तर पर टिप्पणी करने के लिए धन्यवाद। अलर्ट प्रश्न में पूछे गए अलर्ट को दिखाने के लिए है। –

2

मदद मिल सकती है अपनी खुद की UIBarButtonItem बनाएँ और के रूप में सेट viewDidLoadकी विधि।

उदाहरण के लिए (यहां मैंने एक सिस्टम आइटम का उपयोग किया है लेकिन आप एक अलग भी बना सकते हैं, विवरण के लिए कक्षा संदर्भ देखें)।

UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showAlertView:)]; 
self.navigationItem.leftBarButtonItem = leftBarButtonItem; 

// only if you don't use ARC 
// [leftBarButtonItem release]; 

जहां

- (void)showAlertView:(id)sender 
{ 
    // alert view here... 
} 
8

पहले

self.navigationItem.hidesBackButton = YES; 

का उपयोग करके वापस बटन छिपाने के लिए और फिर अपने कस्टम बटन बनाने के लिए:

UIBarButtonItem *backBtn =[[UIBarButtonItem alloc]initWithTitle:@"back" style:UIBarButtonItemStyleDone target:self action:@selector(popAlertAction:)]; 
self.navigationItem.leftBarButtonItem=backBtn; 
[backBtn release]; 

और अपने चयनकर्ता यहाँ है:

- (void)popAlertAction:(UIBarButtonItem*)sender 
{ 
    //Do ur stuff for pop up 
} 
+0

के दोस्तों धन्यवाद, यह दूसरा विकल्प है, क्या UINavigationController के बैक बटन एक्शन का पता लगाने का कोई तरीका है ..? –

+0

'बी' के बारे में क्या? कृपया इसे ठीक करें। –

+0

@ हरिशशरण तुम्हारा क्या मतलब है? जब आप अलर्ट व्यू पर क्लिक करते हैं तो क्या आपको वापस जाने की आवश्यकता है? –

7

बेस्ट और आसान तरीका

जहां प्रेस का पता लगाने के लिए चाहते हैं दृश्य नियंत्रक में इस डाल का प्रयास करें:

-(void) viewWillDisappear:(BOOL)animated { 
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) { 
     // back button was pressed. We know this is true because self is no longer 
     // in the navigation stack. 
    } 
    [super viewWillDisappear:animated]; 
} 
0

viewControllerCount - वर उस नंबर रखती है दृश्य नियंत्रक पहले UINavigationController में था। फिर, हम जांचते हैं कि viewControllerCount> [viewControllers count] यदि हम जानते हैं कि हम वापस आ जाएंगे (यानी बैक बटन अनुकरण)।

- (void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController 
        animated:(BOOL)animated 
{ 
    NSArray *viewControllers = [navigationController viewControllers]; 

    if (viewControllerCount > [viewControllers count]) 
    { 
     // your code 
    } 

    viewControllerCount = [viewControllers count]; 
} 
संबंधित मुद्दे