2012-11-08 52 views
0

我有一個的UITabBarController一個主屏幕,我想將其設置爲RootViewController的,但是當我做,我有以下錯誤的UITabBarController爲RootViewController的在MonoTouch的

MonoTouch.Foundation.MonoTouchException has been thrown: 

Objective-C exception thrown. Name: NSUnknownKeyException Reason: [<UIApplication 0xc82d330> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key tabBarController. 

MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown. Name: NSUnknownKeyException Reason: [<UIApplication 0xc82d330> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key tabBarController. 
    at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr) 
    at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38 
    at Test.Application.Main (System.String[] args) [0x00000] in /Users/merqurio/Projects/Test/Test/Main.cs:17 

我還設置筆尖名稱與同一XIB名文件的所有者。

這是我的項目示例。 Click Here to Download Project

回答

1

你必須設置Viewcontrollers編程....像下面

-(id)init { 

    self = [super init]; 
    if (self) { 


     HomePageViewController *homePageViewController = [[HomePageViewController alloc]initWithNibName:@"HomePageViewController" bundle:nil]; 
     WorkoutOfTheDayViewController *workoutOfTheDayViewController = [[WorkoutOfTheDayViewController alloc]initWithNibName:@"WorkoutOfTheDayViewController" bundle:nil]; 
     ScheduleViewController *scheduleViewController = [[ScheduleViewController alloc]initWithNibName:@"ScheduleViewController" bundle:nil]; 
     TrackingViewController *trackingViewController = [[TrackingViewController alloc]initWithNibName:@"TrackingViewController" bundle:nil]; 

     UINavigationController *navHome = [[UINavigationController alloc]initWithRootViewController:homePageViewController]; 
     UINavigationController *navWorkOut = [[UINavigationController alloc]initWithRootViewController:workoutOfTheDayViewController]; 
     UINavigationController *navSchedule = [[UINavigationController alloc]initWithRootViewController:scheduleViewController]; 
     UINavigationController *navTrack = [[UINavigationController alloc]initWithRootViewController:trackingViewController]; 

     homePageViewController.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"Home" image:[UIImage imageNamed:@"home.png"] tag:0]; 
     workoutOfTheDayViewController.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"Log WOD" image:[UIImage imageNamed:@"wod.png"] tag:1]; 
     scheduleViewController.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"Schedule" image:[UIImage imageNamed:@"schedule.png"] tag:2]; 
     trackingViewController.tabBarItem = [[UITabBarItem alloc]initWithTitle:@"Tracking" image:[UIImage imageNamed:@"tracking.png"] tag:3]; 


     self.viewControllers = [NSArray arrayWithObjects:navHome,navWorkOut,navSchedule,navTrack, nil]; 

    } 
    return self; 
} 

創建一個單獨的類作爲UITabbarcontroller ......

然後裏面的Appdelegate.h

self.window.rootViewController = [[MainTabBarController alloc]init]; 
+1

的問題不是視圖控制器未設置。班級不是「兼容」的。根據日誌,問題是「這個類不是關鍵tabBarController的關鍵值編碼」。因此有一個調用來設置根視圖控制器。 –

0
public override bool FinishedLaunching(UIApplication app, NSDictionary options) 
{ 
    _mainWindow = new UIWindow(UIScreen.MainScreen.Bounds); 
    _mainTabBarController = new MainTabBarController(); 
    _mainWindow.AddSubview(_mainTabBarController.View); 
    _mainWindow.MakeKeyAndVisible(); 
    window.RootViewController = _mainTabBarController.View; 
    return true; 
} 

MainTabBarController像波紋管..

public class MainTabBarController : UITabBarController 
{ 
    public override void ViewDidLoad() 
    { 
     ViewControllers = new UIViewController[] 
     { 
      new ViewControllerTab1(), 
      new ViewControllerTab2(), 
      new ViewControllerTab3(), 
      new ViewControllerTab4(), 
      new ViewControllerTab5() 
     }; 

    } 
} 

更多信息請參見this answer

+0

嘿看到創建tabbar的視圖和添加後作爲窗口的子視圖的答案。 –

相關問題