2013-02-07 207 views
0

對不起,如果這看起來像一個簡單的問題,但每次我搜索谷歌這個主題,我所能找到的是如何將數據從子視圖傳遞到父視圖,反之亦然。通過uinavigationcontroller將變量從父視圖傳遞給子視圖

基本上,我提出了一個模態視圖,它在它自己的UINavigation控制器中。模式視圖需要知道是否允許用戶'編輯' - 所以我認爲最簡單的方法是將子視圖(isEdit)上的BOOL設置爲TRUE(這會得到因爲這個模態視圖是從UINavigation控制器提供的 - 我無法從 - (void)prepareForSegue函數訪問它,並直接設置BOOL。我已經嘗試了UINav控制器的子類化,並在其中包含一個可以設置的BOOL,然後在子視圖中進行檢查,但我似乎無法從子視圖訪問控制器 - 我將包含我的代碼,但我確定必須有一個更簡單的方法來完成這項任務!

是否有人能夠建議一個更經濟的方式將此布爾值通過UINavigationController傳遞給子視圖?

感謝

回答

5

如果您賽格瑞調用一個導航控制器,你可以從根視圖控制器上設置屬性,像這樣

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"MySegueId"]) { 
     UINavigationController *navController = (UINavigationController *)segue.destinationViewController; 
     MyViewController *childController = (MyViewController *)navController.childViewControllers.lastObject; 
     childController.isEditable = YES; 
    } 
} 
+0

這是如果你使用故事板,或者你正在以編程方式調用segue。如果沒有,你可以在初始化子視圖控制器時設置屬性,按照Joel的建議。 – followben

0

當你分配/初始化剛纔設置的屬性,然後模態視圖控制器(說你的模式視圖控制器被稱爲ProfileVC):

ProfileVC *vc = [[ProfileVC alloc] init]; 
vc.isEdit = YES; 
[vc.navigationController presentModalViewController:vc animated:YES]; 

只要確保你的ProfileVC.h你有一個叫isEdit屬性:

@interface ProfileVC : UIViewController 
@property (nonatomic) BOOL isEdit; 
@end 
+0

OP表示導航控制器本身是模態的。也就是說,這樣做,你可以在使用'-initWithRootViewController:'來初始化navController和childVC之前設置屬性。 – followben