无法理解iPhone视图布局

时间:2009-11-02 22:34:30

标签: iphone objective-c interface-builder

我有一个基于教程构建的iphone应用程序(针对不同的框架,所以我不得不修改一些东西)在同一个View上使用TabBar和NavigationBar,它还包含一个从SQLite数据库填充的UITable 。 我昨晚制作了它,当你在UITable中选择一个项目时,它被重定向到一个显示我的项目细节的视图(此时,只是一个城市名称)。我进去试图修改那个DetailView ......我没有改变任何工作。 所以我有几个问题/问题: 1)为什么我的CityDetailView.xib在Interface Builder中看起来像这样:

alt text http://www.jamespwright.com/images/public/detailviewinterfacebuilder.jpg

但是在运行应用程序时看起来像这样:

alt text http://www.jamespwright.com/images/public/wrongdetailview.jpg

我是iPhone开发新手,所以我甚至不确定从哪里开始寻找这个问题。 我知道TableViewController设置为CitiesTableViewController,并在我的didSelectRowAtIndexPath中的控制器代码中运行此代码:

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
 City *city = (City *)[appDelegate.cities objectAtIndex:indexPath.row];

 // Initialize a new CityDetailView if there isn't one already
 if (self.cityView == nil) {
  CityDetailViewController *viewController = [[CityDetailViewController alloc] initWithNibName:@"CityDetailViewController" bundle:[NSBundle mainBundle]];

  self.cityView = viewController;
  [viewController release];
 }

 [appDelegate.citiesNavController pushViewController:cityView animated:YES];
 self.cityView.city = city;
 self.cityView.title = city.name;
 [self.cityView.cityName setText:city.name];
 [self.cityView.stateName setText:city.state];
 [self.cityView.population setText:city.population];

我在Interface Builder中将标签链接到Controller中的属性。 我还将CityDetailView.xib类标识设置为CityDetailViewController,它具有正确声明的所有属性。 有一点我无法弄清楚,如果我将CityDetailView.xib重命名为“CityDetailView.xib1”,程序仍然运行相同,但如果我改变[self.cityView.title = city.name]; to [self.cityView.title = @“Bob's Your Uncle!”];它显示程序中的变化。

在一个完全不相关的注释中,在我的TableView(我的第二个标签)上,我在底部有这个奇怪的栏,我不知道它是什么或如何摆脱它,我很确定它必须使用NavigationController,但我不知道为什么或如何在那里。就是这个:

alt text http://www.jamespwright.com/images/public/tabandnavigationview.jpg

有人能就这些问题向我提出任何建议吗?

2 个答案:

答案 0 :(得分:1)

当您更改源文件时“没有任何反应”时,您通常只会做一些事情:

  • 日期被搞砸了,你需要清理(建造→清洁)
  • 您正在编辑错误的文件
  • 你正在构建错误的目标
  • 不,严重的是,您正在编辑错误的文件,或构建错误的目标

清洁绝对是首先要尝试的。特别是如果你可以重命名XIB并且仍然可以愉快地继续下去。

答案 1 :(得分:0)

最简单的解释是self.cityView.stateName和后续标签未在界面构建器中连接。控制器必须有一个连接到每个标签的插座,以便填充它。如果您向无法找到的对象发送消息,则Objective-C不会引发错误。