代码之家  ›  专栏  ›  技术社区  ›  Nick

将导航栏转换为Tabbar应用程序

  •  2
  • Nick  · 技术社区  · 14 年前

    我想知道如何将NavigationController样式的应用程序转换为TabbarController样式的应用程序。我将主窗口更改为不再包含导航控制器(改为TabbarController)和我的代理,但当我启动应用程序时,仍有人认为我需要导航控制器:

    由于未捕获异常“nsUnknownKeyException”,正在终止应用程序,原因:“[setValue:ForUndefinedKey:]:此类不是键导航控制器的键值编码兼容。”

    堆栈跟踪:

    #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
    

    我的代表界面如下:

    @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;
    

    我代表的执行情况:

    @implementation CPPlayerAppDelegate
    
    @synthesize 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];
    }
    

    在哪里可以指定应用是TabbarControlled应用,而不是NavigationBarControlled应用?

    事先谢谢,

    2 回复  |  直到 14 年前
        1
  •  3
  •   Noah Witherspoon    14 年前

    你需要改变你的主要XIB。在Interface Builder中打开它,删除当前拥有的导航控制器,并将其替换为选项卡栏控制器。然后链接应用程序代理的 tabBarController 输出到XIB中的选项卡控制器。有关如何执行所有这些操作的详细信息,请参阅 Interface Builder User Guide 更具体地说, Connections and Bindings 部分。

        2
  •  0
  •   Gregg    14 年前

    我发现-info.plist文件在我将项目转换为iPad应用程序后引用了错误的XIB文件,然后删除了导航控制器并替换了一个没有它的新顶层视图结构。我已经加载并编辑了非iPad XIB,但忽略了与其他XIB一起创建的资源iPad文件夹。

    一旦处理好了那件事,一切都很好。