UITabBarController作为MonoTouch中的RootViewController

时间:2012-11-08 11:50:26

标签: iphone mono xamarin.ios uitabbarcontroller xib

我有一个带有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

我还设置了具有相同XIB名称的文件所有者的Nib名称。

这是我的项目示例。 Click Here to Download Project

2 个答案:

答案 0 :(得分: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 :(得分: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