1

假設我們的UINavigationController中有3個ViewController稱爲ViewControllerA,ViewControllerB,ViewControllerC。具體來說,ViewControllerA是RootViewController,並且ViewControllerB和ViewControllerC被推送。所以,目前ViewControllerC位於頂端,對用戶可見。將一些數據傳回RootViewController iOS 7

我想通過調用[self.navigationController popToRootViewControllerAnimated:YES];方法返回到ViewControllerA並從這裏傳遞一些數據給ViewControllerA。我必須根據從ViewControllerC傳遞的數據更新一些UI。

如果我必須從ViewControllerB返回數據,那麼我可以實現自定義協議/委託。但是,在上述情況下,可以採取什麼樣的方法?

在此先感謝您的幫助。

+0

使用單例類的實現從lastView控制器先分享信息。 –

+0

您也將使用NSNotificationCenter將數據發送到任何正在運行的視圖控制器。 – Natarajan

+0

在這種情況下使用localNotification共享信息 – Mani

回答

3

你可以試試NSNotificationCenter如下圖所示,

例子:

在你ViewControllerA.m

-(void)viewDidLoad 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataReceived:) name:@"passData" object:nil]; 
} 

-(void)dataReceived:(NSNotification *)noti 
{ 
    NSLog(@"dataReceived :%@", noti.object); 
} 

在你ViewControllerC.m

-(void)gotoHome 
{ 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"passData" object:[NSDictionary dictionaryWithObject:@"Sample Data" forKey:@"dataDic"]]; 

    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

謝謝!

+0

是的,這正是我想要的。非常感謝:) – ayon

+0

歡迎您:) – Natarajan

0

最好的方法是將不同類別中的共享信息分開(我建議,它將是一些模型類)。只需在兩個視圖控制器中存儲相同的模型類實例,並在模型類更改時更新它們。使用通知,KVC或詢問模型狀態每個viewDidAppear:方法。

1

在這裏你可以委託方法做

//這是你的根視圖控制器調用委託方法

#import "ThirdViewController.h" 
#import "SecondViewController.h" 
@interface ViewController()<ThirdViewControllerDelegate> 
    @end 

@implementation ViewController 
#pragma mark - 
#pragma mark ThirdViewController Delegate Method 

//在你的根視圖控制器

委託方法實現
-(void)didSelectValue:(NSString *)value{ 
    NSLog(@"%@",value); 
} 
// Pass the last Vc delegate to the next ViewController 
-(void)gotoSeconddVc{ 
    SecondViewController *vc2=[[SecondViewController alloc]init]; 
    vc2.lastDelegate=self; 
    [self.navigationController pushViewController:vc2 animated:YES]; 
} 


#import "ThirdViewController.h" 
    @interface SecondViewController : UIViewController 
     @property(nonatomic,retain) id <ThirdViewControllerDelegate> lastDelegate; 
     @end 

-(void)gotoThirdVc{ 
    ThirdViewController *vc3=[[ThirdViewController alloc]init]; 
    vc3.delegate=self.lastDelegate; 
    [self.navigationController pushViewController:vc3 animated:YES]; 
} 

最後視圖 - 控制

@implementation ThirdViewController 


-(void)btnDoneClicked{ 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
    [self.delegate didSelectValue:strValue]; //call delegate methods here 
} 
相關問題