2014-08-28 41 views
0

在我的iOS應用程序,用戶前進通過應用像這樣:iOS的確定上一視圖控制器

VC1> VC2> VC3

我想確定用戶是否從VC3按下後退按鈕返回到VC2並執行一些代碼,如果用戶這樣做。我認爲我可以在VC2中的didMoveToParentViewController方法中完成此操作,並確定之前的視圖控制器,但它沒有返回正確的viewController(它正在返回VC1)。

這樣做的最好方法是什麼?

這是我目前有

-(void)didMoveToParentViewController:(UIViewController *)parent{ 
    NSLog(@"returned to VC2"); 
    NSInteger numberOfViewControllers = self.navigationController.viewControllers.count; 

    if(numberOfViewControllers >=2){ 
     // returned to view -> reload projects 
     NSLog(@"reloading projects from VC3"); 
     [self loadProjects:self.view]; 
    } 
} 
+0

您是否想在VC3中執行代碼,因爲它退出或返回到VC2時? – Paulw11 2014-08-28 20:41:18

+0

你在用故事板嗎? – Paulw11 2014-08-28 20:50:30

+0

@ paulw11當我回到VC2 – scientiffic 2014-08-29 02:10:14

回答

0

在 「AppDelegate.h」 文件,你執行 「UINavigationControllerDelegate」 協議狀態:

#import <UIKit/UIKit.h> 

@interface AppDelegate : UIResponder <UIApplicationDelegate, UINavigationControllerDelegate> 

@property (strong, nonatomic) UIWindow *window; 

@end 

在 「AppDelegate.m」文件,覆蓋該協議的這種方法:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if ([viewController isKindOfClass:[SecondViewController class]]) 
    { 
     // Insert the code here 
    } 
} 

在SecondViewController類中,m ake BOOL屬性,您將設置爲YES或NO,具體取決於該方法是否需要執行。

+0

感謝您的幫助。我試着將你的建議添加到我的AppDelegate文件中,但似乎這些方法從未被調用(我把日誌放在檢查中)。每次用戶切換視圖時都應該調用? – scientiffic 2014-08-29 02:25:25

+0

您還需要在AppDelegate.m文件中將navigationController的委託屬性設置爲self。你已經這樣做了嗎? – ppalancica 2014-08-29 03:31:11

+0

不,我沒有那樣做......我該怎麼做? – scientiffic 2014-08-29 14:58:09

1

如果您正在使用故事板,則可以使用unwind segue

在您的VC2,添加一個方法,例如 -

- (IBAction)unwindToVC2:(UIStoryboardSegue*)sender 
{ 

    //Whatever you need to do 
} 

然後在VC3故事板的場景,將一個新欄按鈕項目到您的導航項目的左側。選擇按鈕 - 將其標題更改爲「後退」或任何您想要的內容,然後控制拖動到場景底部的綠色「退出」圖標。選擇「unwindToVC2:」,你就完成了。

+0

感謝您的幫助 - 這對我有用。但是有沒有一種方法來設置欄按鈕的樣式,使其看起來像左後箭頭? – scientiffic 2014-08-29 02:44:31

+0

不容易不幸 - http://stackoverflow.com/questions/3310454/creating-back-arrow-shaped-leftbarbuttonitem-on-uinavigationcontroller – Paulw11 2014-08-29 02:52:15

+0

我明白了......但是當用戶點擊時必須有某種回調視圖控制器沒有設置這個新的酒吧按鈕! – scientiffic 2014-08-29 02:55:32

0

感謝大家的建議。最後,我採取了不同的方法。我創建了一個布爾值,以確定不是特定賽格瑞是否被初始化:

BOOL reloadProjects; 

這個布爾值被設置爲YES時,SEGUE被調用。然後,當用戶返回視圖時,我重新加載項目:

-(void)viewWillAppear:(BOOL)animated{ 
    [super viewWillAppear:YES]; 
    if(reloadProjects == YES){ 
     [self loadProjects:self.view]; 
     reloadProjects = NO; 
    } 
} 
相關問題