2010-05-12 32 views
0

我在應用程序委託中使用了兩個UIViewController,並使用presentmodalviewcontroller導航到UIViewController。但問題是,本modalviewcontroller第一次工作UIViewController,當我想導航到第二個UIViewController使用presentmodalviewcontroller然後它顯示第一個UIViewController。 以下是代碼: -presentmodalviewcontroller在iPhone中的應用程序委託中無法正常工作

-(void)removeTabBar:(NSString *)str 
{ 
    HelpViewController *hvc =[[HelpViewController alloc] initWithNibName:@"HelpViewController" bundle:[NSBundle mainBundle]]; 
    VideoPlaylistViewController *vpvc =[[VideoPlaylistViewController alloc] initWithNibName:@"VideoPlaylistViewController" bundle:[NSBundle mainBundle]]; 
    if ([str isEqualToString:@"Help"]) 
    { 
     [tabBarController.view removeFromSuperview]; 
     [vpvc dismissModalViewControllerAnimated:YES]; 
     [viewController presentModalViewController:hvc animated:YES]; 
     [hvc release]; 
    } 
    if ([str isEqualToString:@"VideoPlaylist"]) 
    { 
     [hvc dismissModalViewControllerAnimated:YES]; 
     [viewController presentModalViewController:vpvc animated:YES]; 
     [vpvc release]; 
    } 
} 

有人可以幫我解決這個問題?

回答

0

每次運行此功能時,您都在製作新的hvcvpvc

第一次通過,我假設你打電話removeTabBar:@"Help",它使hvcvpvc,然後顯示正確的。

第二次將其稱爲removeTabBar:@"VideoPlayList"時,您正在製作新的hvcvpvc。這意味着當你撥打hvc dismissModalViewController:YES];時,你並沒有刪除之前添加的那個,而是刪除了你剛剛創建的並沒有被顯示的新的!

要解決此問題,您需要將兩個控制器作爲應用程序委託中的屬性,並在applicationDidFinishLaunching方法中創建它們。

添加到這些應用程序委託的.h文件中:

@class MyAppDelegate { 
    HelpViewController *hvc; 
    VideoPlaylistViewController *vpvc; 
} 

@property (nonatomic, retain) HelpViewController *hvc; 
@property (nonatomic, retain) VideoPlaylistViewController *vpvc; 

@end 

和應用程序委託的.m文件:

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    ... 
    self.hvc = [[[HelpViewController alloc] initWithNibName:@"HelpViewController" bundle:nil] autorelease]; 
    self.vpvc = [[[VideoPlaylistViewController alloc] initWithNibName:@"VideoPlaylistViewController" bundle:nil] autorelease]; 
    ... 
} 

,並刪除removeTabBar

的前兩行
相關問題