iPhone UITableView,UINavigationView和Interface Builder

时间:2010-12-13 20:44:35

标签: iphone uitableview interface-builder uinavigationcontroller

我正在构建一个应用程序,最终会有很多选项卡,表格,地图等,但是,我想构建一些非常简单的东西,这是一个令人头痛的问题。

我正在使用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挂钩?

1 个答案:

答案 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这样的好调用都可以正常工作。

我仍然想知道我应该怎么做呢。