【发布时间】:2011-02-14 20:50:16
【问题描述】:
我一直在 XCode 和 Tab Bar 项目类型的 Interface Builder 中开发 iPhone 应用程序。在获得主题(业务部门)工作正常的表格视图后,我意识到我需要添加一个导航控件以允许用户深入了解子主题(子部门)表。
作为一名绿色的 Objective-C 开发人员,这令人困惑,但我通过阅读各种文档尝试了几种不同的 IB 选项,设法让它工作起来。我当前的设置是一个选项卡栏控制器,其中选项卡 1 作为导航控制器,选项卡 2 是一个普通视图,其中放置了一个表格视图。接线工作:我可以在选择表行时进行记录,并且我准备将新的视图控制器推送到堆栈上,以便我可以显示子主题表视图。
我的问题:由于某种原因,第一个选项卡的表视图是第二个选项卡的委托和数据源。这对我来说没有意义,我不明白为什么这是唯一有效的设置。我还遇到了其他问题,我认为这些问题是由愚蠢的接线引起的。
这是接线:
- 导航控制器(扇区)是
标签栏的代表
- 导航栏是 导航控制器的代表 (部门)
- View Contoller (Sectors) 拥有 Table View 的视图
- 表格视图(在导航中 Controller (Sectors)) 是一个委托 第一视图控制器 (公司)
- 表格视图(在导航中 Controller (Sectors)) 是 First View Controller 的一个 dataSource 出口 (公司)
- 第一视图控制器(公司)
- First View Contoller (Sectors) 拥有 Table View 的视图
- 表视图(在第一个视图控制器(公司)中)未连接到数据源插座并且不是委托
当我单击选项卡按钮并查看检查器时,我看到第一个选项卡已正确连接到我的 MainWindow.xib 并且第二个选项卡选择了一个名为 SecondView.xib 的 nib。它在 MainWindow.xib 的文件所有者中,我在 .h 中继承 UITableViewDataSource 和 UITableViewDelegate(以及 UITabBarControllerDelegate),在我实现委托方法的 .m 中。
为什么只有当我的第一个选项卡(视图控制器(扇区))中的表视图是第二个选项卡的委托和数据源时,此设置才有效?我很困惑:为什么不需要将它连接到可以看到表格视图的启用导航控制器的选项卡(导航控制器(扇区))?在第二个选项卡上看到的表视图既没有数据源也不是委托。
我无法触发 pushViewController(self.navigationController 不是 nil,但新的 View Controller 仍然没有加载),我怀疑我需要解决这个 IB 接线问题,然后才能解决为什么Nav Controller 不会将新的 View Controller 推送到堆栈上。
if(nil == self.navigationController) {
NSLog(@"self.navigationController is nil.");
} else {
NSLog(@"self.navigationController is not nil.");
SectorList *subsectorViewController = [[SectorList alloc] initWithNibName:@"SectorList" bundle:nil];
subsectorViewController.title = @"Subsectors";
[[self navigationController] pushViewController:subsectorViewController animated:YES];
[subsectorViewController release];
}
【问题讨论】:
标签: iphone objective-c interface-builder ios-simulator