开发者

Converting a navbar to a tabbar app

开发者 https://www.devze.com 2022-12-30 06:02 出处:网络
I was wondering how to convert a NavigationController style app into a TabBarcontroller style app. I changed my mainwindow to not contain a navigationcontroller anymore (but a tabbarcontroller instead

I was wondering how to convert a NavigationController style app into a TabBarcontroller style app. I changed my mainwindow to not contain a navigationcontroller anymore (but a tabbarcontroller instead) and my delegate also appropriately, but when I launch the app something still thinks I want a navigationController:

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key navigationController.'

Stack trace:

#0 0x020fa004 in ___TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION___
#1 0x96fc0509 in objc_exception_throw
#2 0x020ee1c1 in -[NSException raise]
#3 0x000d8a78 in _NSSetUsingKeyValueSetter
#4 0x000d84c5 in -[NSObject(NSKeyValueCoding) setValue:forKey:]
#5 0x004fb4c8 in -[UIRuntimeOutletConnection connect]
#6 0x020af92f in -[NSArray makeObjectsPerformSelector:]
#7 0x004f9f7f in -[UINib instantiateWithOptions:owner:loadingResourcesFromBundle:]
#8 0x004fbfcb in -[NSBundle(NSBundleAdditions) loadNibNamed:owner:options:]
#9 0x0033b0a6 in -[UIApplication _loadMainNibFile]
#10 0x0034482a in -[UIApplication _runWithURL:sourceBundleID:]
#11 0x00341b88 in -[UIApplication handleEvent:withNewEvent:]
#12 0x0033d6d3 in -[UIApplication sendEvent:]
#13 0x003440b5 in _UIApplicationHandleEvent
#14 0x0265aed1 in PurpleEventCallback
#15 0x02092b80 in CFRunLoopRunSpecific
#16 0x02091c48 in CFRunLoopRunInMode
#17 0x0033be69 in -[UIApplication _run]
#18 0x00345003 in UIApplicationMain
#19 0x00002ec8 in main at main.m:14

The interface for my delegate is as follows:

@interface CPPlayerAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
    UIWindow *window;
 UITabBarController *tabBarController;
}

#pragma mark -
#pragma mark Window/view
@property (retain) IBOutlet UIWindow *window;
@property (retain) IBOutlet UITabBarController *tabBarController;

The implementation of my delegate:

@implementation CPPlayerAppDelegate

@synt开发者_开发问答hesize window;
@synthesize tabBarController;

@synthesize stateController, distribution, languageManager, updateParser, soundPlayer, ticketProcessor;

#pragma mark -
#pragma mark Application lifecycle

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
 [window addSubview: tabBarController.view];
    [window makeKeyAndVisible];
}

Where can I specify the app is a tabbarcontrolled app, instead of a navigationbarcontrolled app?

Thanks in advance,


You need to alter your main XIB. Open it in Interface Builder, delete the navigation controller you've currently got, and replace it with a tab-bar controller. Then link your application delegate's tabBarController outlet to the tab-bar controller in the XIB. For more information about how to do all that, see the Interface Builder User Guide and, more specifically, the Connections and Bindings section.


I found that the -Info.plist file had a reference to the wrong xib file after I had converted my project to an iPad app, and then removed the navigation controller and substituted a new top level view structure without it. I had loaded and edited the non-iPad xib, but had overlooked the Resources-iPad folder that had been created with the other xib.

Once took care of that xib, everything was fine.

0

精彩评论

暂无评论...
验证码 换一张
取 消