आपको डेलिकेट प्रोटोकॉल का उपयोग करने की आवश्यकता है ... यह कैसे करना है:
अपने दूसरे दृश्य नियंत्रक के हेडर फ़ाइल में एक प्रोटोकॉल घोषित करें। इसे ऐसा दिखना चाहिए:
#import <UIKit/UIKit.h>
@protocol SecondDelegate <NSObject>
-(void)secondViewControllerDismissed:(NSString *)stringForFirst
@end
@interface SecondViewController : UIViewController
{
id myDelegate;
}
@property (nonatomic, assign) id<SecondDelegate> myDelegate;
अपने कार्यान्वयन में myDelegate को संश्लेषित करना न भूलें (SecondViewController.m) फ़ाइल:
@synthesize myDelegate;
अपनी FirstViewController की हेडर फ़ाइल में ऐसा करके SecondDelegate प्रोटोकॉल की सदस्यता लें:
#import "SecondViewController.h"
@interface FirstViewController:UIViewController <SecondDelegate>
अब जब आप FirstViewController में SecondViewController इंस्टेंट करते हैं, तो आपको निम्नलिखित करना चाहिए:
SecondViewController *second = [[SecondViewController alloc] initWithNibName:"SecondViewController" bundle:[NSBundle mainBundle]];
SecondViewController *second = [SecondViewController new];
second.myString = @"This text is passed from firstViewController!";
second.myDelegate = self;
second.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentModalViewController:second animated:YES];
[second release];
अंत में, आपके पहले व्यू कंट्रोलर (FirstViewController.m) के लिए कार्यान्वयन फ़ाइल में, दूसरे दृश्य के लिए SecondDelegate की विधि लागू करें:
- (void)secondViewControllerDismissed:(NSString *)stringForFirst
{
NSString *thisIsTheDesiredString = stringForFirst;
}
अब जब आप दूसरे दृश्य नियंत्रक को खारिज करने वाले हैं, तो आप पहले दृश्य नियंत्रक में लागू विधि को लागू करना चाहते हैं। यह हिस्सा सरल है। आप अपने दूसरे दृश्य नियंत्रक में, बर्खास्त कोड से पहले कुछ कोड जोड़ते हैं:
if([self.myDelegate respondsToSelector:@selector(secondViewControllerDismissed:)])
{
[self.myDelegate secondViewControllerDismissed:@"THIS IS THE STRING TO SEND!!!"];
}
[self dismissModalViewControllerAnimated:YES];
डेलीगेट प्रोटोकॉल एक्स्ट्रैलेमी, एक्सट्रैमी, एक्सट्रैलेमी उपयोगी हैं। यह आपको उनके साथ खुद को परिचित करने के लिए अच्छा लगेगा :)
NSNotifications ऐसा करने का एक और तरीका है, लेकिन एक सर्वोत्तम अभ्यास के रूप में, मैं इसका उपयोग तब करना पसंद करता हूं जब मैं कई व्यू कॉन्ट्रोलर्स या ऑब्जेक्ट्स में संचार करना चाहता हूं। यदि आप NSNotifications का उपयोग करने के बारे में उत्सुक हैं, तो यहां एक उत्तर मैंने पहले पोस्ट किया है: Appdelegate में एक थ्रेड से कई व्यू-कंट्रोलर के पार फायरिंग की घटनाएं
संपादित करें:
यदि आप कई तर्क पारित करना चाहते हैं, तो खारिज करने से पहले कोड इस तरह दिखता है:
if([self.myDelegate respondsToSelector:@selector(secondViewControllerDismissed:argument2:argument3:)])
{
[self.myDelegate secondViewControllerDismissed:@"THIS IS THE STRING TO SEND!!!" argument2:someObject argument3:anotherObject];
}
[self dismissModalViewControllerAnimated:YES];
इसका मतलब है कि आपके FirstViewController के अंदर आपका SecondDelegate विधि कार्यान्वयन अब इस तरह दिखाई देगा:
- (void) secondViewControllerDismissed:(NSString*)stringForFirst argument2:(NSObject*)inObject1 argument3:(NSObject*)inObject2
{
NSString thisIsTheDesiredString = stringForFirst;
NSObject desiredObject1 = inObject1;
}