यह प्रतिनिधियों का उपयोग करने के लिए एक महान जगह की तरह लगता है। अपने RegisterViewController.h इस
@protocol RegisterViewDelegate <NSObject>
- (void)tellRegisterDelegateSomething:(NSObject*)something;
@end
की तरह एक प्रोटोकॉल को परिभाषित फिर अपने वर्ग पर अपने प्रतिनिधि के लिए सूचक रखने
@interface RegisterViewController : UIViewController
@property (weak, nonatomic) id <RegisterViewDelegate> delegate;
@end
अब पेश दृश्य नियंत्रक है कि वे अभी बनाए गए नए प्रोटोकॉल लागू बताओ। यह अन्य दृश्य नियंत्रकों की .h फ़ाइलों में किया जाता है जो इस दृश्य को प्रस्तुत करते हैं।
LoginViewController.h में
@interface LoginViewController : UIViewController <RegisterViewDelegate>
@end
DashboardViewController.h
में
@interface DashboardViewController : UIViewController <RegisterViewDelegate>
@end
ऊपर वर्गों के मीटर फ़ाइलों में, प्रोटोकॉल की विधि को लागू
- (void)tellRegisterDelegateSomething:(NSObject*)something
{
}
अब आप की जरूरत है प्रतिनिधि को असाइन करने के लिए जब आप इस तरह के दृश्य नियंत्रक को प्रस्तुत करने से अपना सेग्यू निष्पादित करते हैं ।
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"SegueToFbRegister"])
{
RegisterViewController* destination = [segue destinationViewController];
destination.delegate = self;
}
}
अब आप पेश दृश्य नियंत्रक (प्रतिनिधि) कहते हैं और यह किसी भी जानकारी (यह आपका RegisterViewController.m में ही कहा जाता है) इस तरह वापस भेजने की जरूरत के साथ कुछ करना हो सकता है।
if ([self.delegate respondsToSelector:@selector(tellRegisterDelegateSomething:)])
{
// Tell the delegate something.
[self.delegate tellRegisterDelegateSomething:something];
}
उदाहरण जहां आपको दो नियंत्रक के माध्यम से वापस जाने की आवश्यकता है, आप उसी मूल पैटर्न का पालन करते हैं।
@protocol LoginViewDelegate <NSObject>
- (void)tellLoginDelegateSomething:(NSObject*)something;
@end
फिर अपने वर्ग पर
@interface LoginViewController : UIViewController
@property (weak, nonatomic) id <LoginViewDelegate> delegate;
@end
अब डैशबोर्ड दृश्य नियंत्रक कि यह प्रोटोकॉल लागू करता है बता आपका प्रतिनिधि के लिए सूचक रखने के लिए। यह डैशबोर्ड व्यू कंट्रोलर की .h फ़ाइलों में किया जाता है जो इस दृश्य को प्रस्तुत करते हैं।
DashboardViewController की .m फ़ाइलों में DashboardViewController.h
@interface DashboardViewController : UIViewController <RegisterViewDelegate, LoginViewDelegate>
@end
में प्रोटोकॉल की विधि
जब आप segue प्रदर्शन ViewController पर प्रतिनिधि की स्थापना के ऊपर पैटर्न का पालन करें कार्यान्वित करें। अब जब प्रतिनिधि विधि को LoginViewController में बुलाया जाता है, तो आप प्रतिनिधि को डैशबोर्ड व्यू कंट्रोलर में भी कॉल करते हैं।
LoginViewController.m
- (void)tellRegisterDelegateSomething:(NSObject*)something
{
if ([self.delegate respondsToSelector:@selector(tellLoginDelegateSomething:)])
{
// Tell the delegate something.
[self.delegate tellLoginDelegateSomething:something];
}
}
अब आप सभी जुड़े हुए हैं ताकि आप दोनों नियंत्रकों (या सिर्फ एक) के माध्यम से वापस डेटा पास है और इसके साथ कुछ कर सकते हैं में
। आपको पता चलेगा कि आप किस परिदृश्य में हैं क्योंकि डैशबोर्ड व्यू कंट्रोलर में विभिन्न प्रतिनिधि विधियों को कॉल किया जाएगा, जिसके आधार पर व्यू कंट्रोलर दिखाई दे रहा था।
उम्मीद है कि इससे मदद मिलती है।
आपकी त्वरित प्रतिक्रिया के लिए बहुत बहुत धन्यवाद, मुझे अधिसूचना से अवगत नहीं था। मैं आपके रास्ते की कोशिश करता हूं जो अधिक उचित लगता है। लेकिन आप आर और एल को बंद करने का सबसे अच्छा तरीका जानते हैं, यह जानकर कि एल शायद नहीं बनाया गया है। –
क्या आप 'UINavigationController' का उपयोग कर रहे हैं?यदि ऐसा है, तो 'popToRootViewController:' धक्का दिया गया सभी वीसी हटा देगा। यदि आप इसके बजाए मोडल वीसी प्रस्तुत कर रहे हैं, तो 'dismissViewControllerAnimated: समापन:' को कॉल करने वाले पहले नियंत्रक पर कॉल करने वाले सभी अन्य लोगों को भी खारिज कर दिया जाएगा जो इसके शीर्ष पर प्रस्तुत किए गए हैं। – Taum