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