如何使用Xib文件创建UIViewController?

时间:2010-01-15 15:59:09

标签: iphone uiviewcontroller interface-builder

很抱歉,如果这个问题已经得到解答,但我找不到答案。

我正在创建一个应用程序,其中我有一个UITableViewController,当选择单元格右侧的附件按钮时,应创建一个包含在.xib文件中找到的接口的UIViewController的新实例。然后,新的UIViewController将被推送到堆栈并显示。 我的问题是如何从现有的.xib文件创建新的UIViewController?

这是我到目前为止所尝试的: 在Xcode中:文件 - >新文件 - > Cocoa Touch Class - > UIViewController子类。 复选框“UITableViewController子类”未选中。 复选框“使用XIB进行用户界面”选中。

这将创建.m,.h和.xib文件。我在.xib文件的“视图”中创建了一个用户界面。在界面构建器中选择“文件所有者”会在“类标识”中显示新创建的UIViewController。

一些代码:

在DetailViewController.m(新的UIViewController)中:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
     return self;
}

在SubViewController.m(旧的UITableViewController)中:

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
     DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
     //Exception thrown at line below
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
}

忘记提及.xib文件的名称是“DetailViewController.xib”。

代码编译得很好,但是当我在模拟器中运行并按下一个附件按钮时,它会因未捕获的异常而终止。

我错过了什么?

提前致谢

2 个答案:

答案 0 :(得分:2)

你不应该这样做:

DetailViewController
*detailViewController = (DetailViewController*)[[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];

如果不是,你会收到编译器警告吗?

答案 1 :(得分:1)

错误发生在我试图显示的新视图中。在.xib文件中,我插入了一个MKMapView,当我删除它时,一切都很完美。

再次感谢您帮我调试!