คุณต้องใช้โปรโตคอลผู้ร่วมประชุม ... นี่คือวิธีการ:
ประกาศโปรโตคอลในไฟล์ส่วนหัวของ secondViewController ควรมีลักษณะดังนี้:
#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>
ตอนนี้เมื่อคุณสร้างอินสแตนซ์ SecondViewController ใน FirstViewController คุณควรทำสิ่งต่อไปนี้:
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 สำหรับ secondViewControllerDismissed:
- (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 เป็นอีกวิธีหนึ่งในการทำเช่นนี้ แต่ตามแนวทางปฏิบัติที่ดีที่สุดฉันชอบใช้เมื่อต้องการสื่อสารผ่าน viewControllers หรือวัตถุหลายตัว นี่คือคำตอบที่ฉันโพสต์ไว้ก่อนหน้านี้หากคุณสงสัยเกี่ยวกับการใช้ NSNotifications: การเริ่มต้นเหตุการณ์ที่เกิดขึ้นกับตัวควบคุมมุมมองหลายตัวจากเธรดในผู้ร่วมประชุม
แก้ไข:
หากคุณต้องการส่งผ่านหลายอาร์กิวเมนต์โค้ดก่อนปิดจะมีลักษณะดังนี้:
if([self.myDelegate respondsToSelector:@selector(secondViewControllerDismissed:argument2:argument3:)])
{
[self.myDelegate secondViewControllerDismissed:@"THIS IS THE STRING TO SEND!!!" argument2:someObject argument3:anotherObject];
}
[self dismissModalViewControllerAnimated:YES];
ซึ่งหมายความว่าการใช้งานเมธอด SecondDelegate ภายใน firstViewController ของคุณจะมีลักษณะดังนี้:
- (void) secondViewControllerDismissed:(NSString*)stringForFirst argument2:(NSObject*)inObject1 argument3:(NSObject*)inObject2
{
NSString thisIsTheDesiredString = stringForFirst;
NSObject desiredObject1 = inObject1;
}