2010-02-28 64 views
1

我有一個MyAppAppDelegate,它包含一個窗口和一個UITabBarController。這是正確的,如果我切換查看以這種方式...(IPhone)

@interface MyAppAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    IBOutlet UITabBarController *rootController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UITabBarController *rootController; 
@end 

而且我觀,包含一個按鈕,切換到查看B.它是.h文件:

#import <UIKit/UIKit.h> 
@class MyAppAppDelegate; 
@class ViewBController; 


@interface ViewAController : UIViewController { 
    IBOutlet UIView *view; 
    IBOutlet UIButton *switchToViewBButton; 
} 
@property (retain, nonatomic) UIView *view; 
@property (retain, nonatomic) UIButton *switchToViewBButton; 

-(IBAction) startSwitching: (id)sender; 

@end 

它是the.m文件:

#import "ViewAController.h" 
#import "ViewBController.h" 

#import "MyAppAppDelegate.h" 

@implementation ViewAController 

/*skip the default generated codes*/ 

-(IBAction) startClock: (id)sender{ 
    NSLog(@"Start Switching"); 

    [rootController presentModalViewController:ViewBController animated:YES]; 
} 

Plz注意到ViewB不能在UITabBarController上顯示,只有當ViewA按鈕被點擊時它纔會出現。另外,我發現調試器告訴我rootController是未聲明的。但是我已經將MyAppDelegate導入到文件中。太赫茲很多......

回答

1

您需要合成rootController實例:

@synthesize rootController; 

那麼它應該工作。將這行代碼放在.m文件中的實現行下面。沒有理由爲什麼你應該得到第二個錯誤,所以試試我的解決方案,然後告訴我們發生了什麼。 另外,請嘗試用完整的句子來寫。根據我的經驗,如果你在論壇帖子中寫得很好,你將會從可能幫助你的人那裏獲得更多的尊重。

+0

這不會起作用,因爲rootController是'MyAppAppDelegate'而不是'ViewAController'的屬性,OP想要使用它。 – 2010-02-28 15:46:12

+0

@詹姆斯試試你寫完整的句子,而不是第一語言英語許多人減輕壓力,也給予實際幫助的答案。 – 2010-02-28 20:14:22

+0

對不起,我錯了。我很確定他們沒有在英語課上教你plz或thz。 – James 2010-03-03 00:14:07

0

不,你需要做這樣的事情:

ViewBController* vc = [[ViewBController alloc] initWithNib: @"ViewBController" mainBundle: nil]; 
if (vc != nil) { 
    [rootController presentModalViewController: vc animated:YES]; 
    [vc release]; 
} 

你正在這個錯誤是要傳遞presentModalViewController:類ViewBController的。相反,它需要一個實例

+0

umum,我仍然得到「rootController未聲明」錯誤。此外,它警告我,這不是-initWithNib:mainBundle:找到的方法,wt的繼續? thz提前。 – Tattat 2010-02-28 14:53:44

+0

是的,它是'initWithNibName:bundle:'。嘗試'self.tabBarController'而不是'rootController'。 – 2010-02-28 16:09:20

0
ViewBController* viewBController = [[[ViewBController alloc] initWithNibName: @"NameOfViewBControllerNibFile" bundle:nil] autorelease]; 
[self presentModalViewController:viewBController animated:YES]; 

不能從ViewAController訪問rootController,因爲它是MyAppAppDelegate,不ViewAController屬性。如果您要訪問的UITabBarController負責ViewAController,那裏面ViewAController您使用self.tabBarController

所以,如果你想UITabBarController上面做,將其更改爲

ViewBController* viewBController = [[[ViewBController alloc] initWithNib: @"NameOfViewBControllerNibFile" mainBundle: nil] autorelease]; 
[self.tabBarController presentModalViewController:viewBController animated:YES]; 
0
ViewBController *vc = [[[ViewBController alloc] initWithNib:@"ViewBController" 
               mainBundle:nil] autorelease]; 
MyAppDelegate *appDelegate = (MyAppAppDelegate *)[UIApplication sharedApplication].delegate; 
[appDelegate.rootController presentModalViewController:vc animated:YES]; 
相關問題