2011-04-30 50 views
0

我有一個UIViewController顯示不同的UIViewController子類。在主UIViewController.m中,我有一個名爲'Home'的應用程序啓動加載子類。self.view insertSubView ....不應該是self.view,但是什麼?

現在,加載Home視圖,我有一個按鈕,我想用它來切換到另一個視圖,稱爲'PreGameInfo'。我嘗試使用下面的代碼:

- (IBAction)showPreGameInfo:(id)sender { 
    [self.view insertSubview:preGameInfo.view atIndex:0]; 
} 

它不工作,我知道這是因爲「self.view」需要參照的主要的UIViewController而不是「家」的自我視圖。有誰知道如何在SubView中使用UIButton的同時向主UIViewController插入子視圖?

謝謝!

+0

這是非常混亂......如果你遵循命名方案,事情會好很多!你的根視圖控制器是一個叫做'MainViewController'的類嗎? 'Home'是一個UIView或一個UIViewController(你應該分別命名爲'HomeView'或HomeViewController')。同樣,最好命名爲PreGameInfo'PreGameInfoViewController'。 – 2011-04-30 15:43:31

+0

現在回到你的問題。我假設你沒有使用UINavigationController。在嘗試添加其視圖之前,您是否已初始化您的'PreGameInfoViewController'? – 2011-04-30 15:45:05

回答

1

您可以使用delagate。很容易

因此在您的信息視圖控制器中執行此操作;

在InformationViewController.h

@protocol InformationViewControllerDelegate; 

@interface InformationViewController : UIViewController { 
    id <InformationViewControllerDelegate> delegate; 
} 

@property (nonatomic, assign) id <InformationViewControllerDelegate> delegate; 

- (IBAction)returnBack:(id)sender; 

@end 

@protocol InformationViewControllerDelegate 

- (void)InformationViewControllerDidFinish:(InformationViewController *)controller; 

@end 

在InformationViewController.m

- (IBAction)returnBack:(id)sender { 
    [self.delegate InformationViewControllerDidFinish:self]; 
} 

而在你需要像這樣的任何視圖控制器使用委託:

在HomeViewController。 h

#import "InformationViewController.h" 
@interface HomeViewController : UIViewController <InformationViewControllerDelegate> { 

} 

編寫方法從主頁視圖的視圖改變爲信息查看

- (IBAction)goToInformationView:(id)sender; 

在HomeViewController.m

- (IBAction)goToInformationView:(id)sender { 
    InformationViewController *controller = [[InformationViewController alloc] initWithNibName:nil bundle:nil]; 
    controller.delegate = self; 
// You can chose the transition you want here (they are 4 see UIModalTransitionStyle) 
     controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 
     [self presentModalViewController:controller animated:YES]; 
     [controller release]; 
    } 

而最後但並非最不重要的委託方法是當InformationViewController通知HomeViewController練完

- (void)InformationViewControllerDidFinish:(InformationViewController *)controller { 
    [self dismissModalViewControllerAnimated:YES]; 
} 

我希望它能幫助

0
- (IBAction)showPreGameInfo:(id)sender { 
    [superview insertSubview:preGameInfo.view atIndex:0]; 
} 
+0

這不適用於我:( – buzzkip 2011-04-30 15:29:39

+0

它沒有做任何事情,或者它是否出現錯誤? – dredful 2011-04-30 15:34:13

0

此代碼是否工作正常?

[self.parentViewController.view addSubview:myView]; 
+0

這取決於您所處的環境很多 – edo42 2011-04-30 15:21:45

+0

不幸的是:( – buzzkip 2011-04-30 15:28:48

+0

@buzzkip您有多少個viewControllers?因爲您可以訪問self.parentViewController.parentViewController.view – edo42 2011-04-30 15:36:40

0

只要做到這一點的modalView:

[self presentModalViewController:preGameInfo animated:YES] 

,或者你可以做這樣的事情......

這條線將新視圖添加到Windows rootViewControllers查看

[self.view.window.rootViewController.view addSubview:preGameInfo.view];