选择 TableView 项目时如何调出 ViewController?
Posted
技术标签:
【中文标题】选择 TableView 项目时如何调出 ViewController?【英文标题】:How to bring up a ViewController when a TableView item is selected? 【发布时间】:2012-07-03 14:34:20 【问题描述】:我正在编写一个有两个主要视图的应用程序。第一个是主屏幕,第二个是 UITableViewController 并填充了一个数组以显示用户的历史记录。 TableView 加载良好并且填充良好,问题是当我去打开主视图控制器备份时。如果我使用:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
ViewController *myView;
myView = [[ViewController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:myView animated:YES];
ViewController 出现了,但是屏幕是黑的!
如果我使用:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
ViewController *myView;
myView = [[ViewController alloc] initWithNibName:@"ViewController" bundle:[NSBundle mainBundle]];
[self presentModalViewController:myView animated:YES];
应用程序崩溃并告诉我:
* 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在其中加载 NIB 捆绑:'NSBundle (已加载)' 名称为 'ViewController'' * 第一次抛出调用栈:(0x30f0a88f 0x35fdb259 0x30f0a789 0x30f0a7ab 0x318a434b 0x318123c7 0x316efc59 0x31665c17 0x31670267 0x316701d5 0x3170f59b 0x3170e367 0x317696a7 0x36dc1 0x316de93d 0x31758627 0x3094d933 0x30edea33 0x30ede699 0x30edd26f 0x30e604a5 0x30e6036d 0x3129f439 0x3165acd5 0x3465b 0x34600) 终止调用 抛出异常(lldb)
我对 iPhone 和 iPad 的应用程序编程非常陌生,但我认为这将是一项相当简单的任务。我之前在其他应用程序中切换过视图,但这个只是不工作。请帮忙!!!
【问题讨论】:
您的UITableViewController
是如何出现在屏幕上的? (您问题的元答案是反转所有内容,以便您返回到主屏幕,而不是尝试复制它。)
您是如何创建 ViewController 的,我的意思是使用 nib 还是以编程方式?您能发布您的 ViewController UI 代码吗?
@NuzhatZari 我正在使用 xib 文件或布局来显示。我不是通过代码设置表单。有代码吗?
然后检查你的 nib 文件名和你在 myView = [[ViewController alloc] initWithNibName:@"ViewController" bundle:[NSBundle mainBundle]] 中提供的名称,我觉得不一样。
【参考方案1】:
由于错误表明您没有名为 ViewController 的 nib 文件,请检查您的项目是否有名为 ViewController 的 nib 文件
【讨论】:
是的,笔尖文件在那里!这就是为什么我不明白为什么它不起作用。【参考方案2】:三件事:
1) 真正考虑为像这样的简单应用程序使用更新的 xcode 和故事板(有支持和反对故事板的论据,但如果您是初学者,它们是要走的路)。
这里有一个很好的文档,您可以参考:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/SecondiOSAppTutorial/Introduction/Introduction.html
2) 你的代码:
myView = [[ViewController alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:myView animated:YES];
这没有多大意义,除非您正在做一些非常复杂的事情(并且您说您是 iphone 开发新手) - 这表明您正在完全以编程方式创建自定义 UIViewController。
以下代码更有意义,但错误表明您尚未在项目中创建 ViewController NIB 文件(您使用 Interface Builder 编辑的 ViewController.xib)。
myView = [[ViewController alloc] initWithNibName:@"ViewController" bundle:[NSBundle mainBundle]];
[self presentModalViewController:myView animated:YES];
3) 你说你创建了几个 ViewController,但是你如何在它们之间转换?通常你会使用 UINavigationController 或 UITabBarController 来处理转换(同样,除非你正在做更复杂的事情)。然后包括允许在视图之间切换的机制。
回到我的第一点 - 使用故事板使管理这些多个视图变得更加简单。
【讨论】:
哦,如果你确定你已经在你的项目中创建了 xib 文件,请检查大小写、拼写等,以及它是否包含在包中(即目标成员为您正在构建的目标上的文件打勾)。 好的,我不知道如何将它包含在 Bundle 中。 ViewController.m、ViewController.h 和 ViewController.xib 都在项目中。我去看看教程,谢谢 它很可能默认包含在内。查看 View->Utilities->Show File Inspector 并检查 xib 文件是否包含在您的目标中(在 Target Membership 下)。以上是关于选择 TableView 项目时如何调出 ViewController?的主要内容,如果未能解决你的问题,请参考以下文章
在Storyboard中,如何让view从状态栏顶部开始布局
从 tableView 中选择项目时触发另一个函数后执行函数