0

我有一个带有 UITabBarController 的 HomeScreen,我想将其设置为 RootViewController,但是当我这样做时出现以下错误

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

我还将 Nib Name 设置为与 File's Owner 相同的 XIB 名称。

这是我的项目示例。点击这里下载项目

4

2 回答 2

1

You have to set Viewcontrollers programmatically....like following

-(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;
}

create one separate class as UITabbarcontroller...

then inside of Appdelegate.h

self.window.rootViewController = [[MainTabBarController alloc]init];
于 2012-11-08T11:56:08.760 回答
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()
        };

    }
}

有关更多信息,请参阅此答案

于 2012-11-08T11:58:30.220 回答