我正在构建一个应用程序,最终会有很多选项卡,表格,地图等,但是,我想构建一些非常简单的东西,这是一个令人头痛的问题。
我正在使用XCode 3.2.5和Interface Builder构建一个简单的应用程序,它将显示导航栏和表格视图。
我知道有模板,但我想构建每个单元,以便稍后(希望)将它链接到标签栏控制器。
从界面构建器构建时,我似乎无法实现导航控制器和表视图的正常工作。
我有充分理由在IB中构建代码 - 其中一些是学习练习,所以我可以帮助其他人,有些是因为代码必须以易于遵循的方式进行交付。
所以,我有两套文件,主窗口。[h / m / xib]和类别。[h / m / xib]。
mainwindows.m的主要代码如下所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchoptions {
quickCats = [[categories alloc] initWithNibName:@"categories" bundle:nil];
[window addSubView: quickCats.view];
[self.window makeKeyAndVisible];
return YES;
}
我在mainwindow.h文件中声明了'quickCats'作为类'类别'的引用。
我的类别。[h / m / xib]是一个库存UIViewController
,子类为UITableViewController
,我只更改了段数,单元格数和单元格方法以正确返回数据
接口声明字面意思是:
@interface categories : UITableViewController {
}
当我第一次启动它时,它会加载并显示表格,所以我知道它有效。
我遇到的问题是导航控制器也能正常工作。
我在对象面板上放置UINavigationController
,然后将UITableViewController
拖到其中,以便在IB屏幕上看起来我同时拥有导航控制器和表格。
现在,无论我如何连线,我都无法让导航控制器触发表格视图。
我必须将文件所有者的视图连接到TableView
或我的应用程序崩溃,并发出未被捕获的异常,说我没有返回UITableView
。
我错过了什么?
我从阅读代码示例中了解到,您通常使用initWithRootViewController
添加导航控制器,但如何将所有这些与IB挂钩?
答案 0 :(得分:0)
好的,我找不到明确的答案,似乎虽然IB允许你放置一个UINavigationController
控件然后添加一个UITableViewController
作为它的孩子,你可以只有initWithNibName:bundle:
才能启动其中一个。我已经尝试了所有我能想到的东西,但它不会让我连接它,以便在NIB加载时初始化另一个。
解决方法是创建一个UIViewController
项目文件,其子类为UITableViewController
,然后创建一个名为MyTableWithNavigation的类作为UIViewController
的子级,展示一个名为'init'的方法并以编程方式创建UINavigationController
传递initWithRootViewController
:然后将结果对象返回到调用它的AppDelegate。
这实现了相同的最终结果,但它是IB / XCode的混合体,现在必须要做。
基本上我的init中的代码如下:
- (id)init {
if (self = [super init]) {
mainTable = [[QuickCategories_iPhone_Table alloc] initWithNibName:@"QuickCategories_iPhone" bundle:nil ];
mainNav = [[UINavigationController alloc] initWithRootViewController: mainTable ];
return mainNav;
} else {
return nil;
}
}
这样,所有像self.navigationItem.title这样的好调用都可以正常工作。
我仍然想知道我应该怎么做呢。