Temsilci protokollerini kullanmanız gerekiyor ... İşte bunu nasıl yapacağınız:
SecondViewController'ın başlık dosyasında bir protokol bildirin. Şöyle görünmeli:
#import <UIKit/UIKit.h>
@protocol SecondDelegate <NSObject>
-(void)secondViewControllerDismissed:(NSString *)stringForFirst
@end
@interface SecondViewController : UIViewController
{
id myDelegate;
}
@property (nonatomic, assign) id<SecondDelegate> myDelegate;
MyDelegate'i uygulamanızdaki (SecondViewController.m) dosyasında sentezlemeyi unutmayın:
@synthesize myDelegate;
FirstViewController'ın başlık dosyasında, şunu yaparak SecondDelegate protokolüne abone olun:
#import "SecondViewController.h"
@interface FirstViewController:UIViewController <SecondDelegate>
Şimdi FirstViewController'da SecondViewController'ı başlattığınızda aşağıdakileri yapmanız gerekir:
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];
Son olarak, ilk görünüm denetleyicinizin (FirstViewController.m) uygulama dosyasında SecondDelegate yöntemini secondViewControllerDismissed için uygulayın:
- (void)secondViewControllerDismissed:(NSString *)stringForFirst
{
NSString *thisIsTheDesiredString = stringForFirst;
}
Şimdi, ikinci görünüm denetleyicisini kapatmak üzereyken, ilk görünüm denetleyicisinde uygulanan yöntemi çağırmak istersiniz. Bu kısım basit. Tek yapmanız gereken, ikinci görünüm denetleyicinizde, kapatma kodundan önce bazı kodlar eklemektir:
if([self.myDelegate respondsToSelector:@selector(secondViewControllerDismissed:)])
{
[self.myDelegate secondViewControllerDismissed:@"THIS IS THE STRING TO SEND!!!"];
}
[self dismissModalViewControllerAnimated:YES];
Delege protokolleri SON DERECE, SON DERECE, SON DERECE kullanışlıdır. Onları tanımanız size iyi gelir :)
NSNotifications bunu yapmanın başka bir yoludur, ancak en iyi uygulama olarak, birden çok viewController veya nesne arasında iletişim kurmak istediğimde bunu kullanmayı tercih ederim. NSNotifications'ı kullanmayı merak ediyorsanız, daha önce gönderdiğim bir cevap: Appdelegate'teki bir ileti dizisinden birden çok görüntü denetleyicisine yönelik olayları tetikleme
DÜZENLE:
Birden fazla argüman iletmek istiyorsanız, kapatmadan önceki kod şu şekilde görünür:
if([self.myDelegate respondsToSelector:@selector(secondViewControllerDismissed:argument2:argument3:)])
{
[self.myDelegate secondViewControllerDismissed:@"THIS IS THE STRING TO SEND!!!" argument2:someObject argument3:anotherObject];
}
[self dismissModalViewControllerAnimated:YES];
Bu, firstViewController'ınızın içindeki SecondDelegate yöntemi uygulamanızın artık şöyle görüneceği anlamına gelir:
- (void) secondViewControllerDismissed:(NSString*)stringForFirst argument2:(NSObject*)inObject1 argument3:(NSObject*)inObject2
{
NSString thisIsTheDesiredString = stringForFirst;
NSObject desiredObject1 = inObject1;
}