我是Objective-C的新手,我开始研究具有一些View的应用程序。我想以编程方式100%创建它们而不使用XIB
个文件。我知道我必须为我的屏幕创建ViewControllers
课程,但我想问你如何使用它来管理导航。假设我有一个ViewController
,其中包含tableView
。我想创建一个下一个屏幕。所以我理解row
类调用
tableViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { //... }
但下一个屏幕怎么样?我还没有。我应该创建一个“准备好的”ViewController
课程吗?在这种情况下如何处理导航?
答案 0 :(得分:3)
在您的情况下,当选择一个单元格时,您会:
因此,首先,您需要确保第一个视图控制器(具有表视图的控制器)包含在UINavigationController中。
// AppDelegate, in applicationDidFinishLanching:
UIViewController *firstViewController = [[[MyCustomTableViewController alloc]
initWithNibName:nil bundle:nil]
autorelease];
UINavigationController *navigationController = [[[UINavigationController alloc]
initWithRootViewController:firstViewController]
autorelease];
[self.window setRootViewController:navigationController];
然后,当选择表视图中的单元格时,您可以写:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIViewController *nextViewController = [[[MyNextViewController alloc]
initWithNibName:nil bundle:nil]
autorelease];
[self.navigationController pushViewController:nextViewController
animated:YES]
}
答案 1 :(得分:2)
请务必阅读Apple的文档:View Controllers Programming Guide
基本上,您必须在导航控制器(容器视图控制器)中嵌入表视图控制器(作为内容视图控制器)。
然后在-tableView:didSelectRowAtIndexPath:中,您将实例化一个新的内容视图控制器,并通过导航控制器将其推送到当前的表视图控制器上,并显示以下消息:
[[self navigationController] pushViewController:<#myNextViewController#> animated:YES];
请务必阅读Apple的代码示例(有些样本非常薄,因此很容易理解)。
答案 2 :(得分:-1)
我讨厌IB,并且在没有它的情况下尝试制作应用程序时遇到了一些麻烦,但它已经嵌入到工作流程中,我发现更容易咬牙并使用它。但是,有些帖子在不同程度上描述了如何在没有IB的情况下发展,例如: