我正在学习如何在 ios 中编写应用程序。任何人都知道最近的一个教程,该教程展示了如何在堆栈顶部推送一个表视图控制器对象的新实例,而无需创建和连接新的 nib?
我在 2009 年 3 月的 iphone SDK 文章中找到了一个旧教程。该网站不再存在,因为其域名已过期。但是这篇文章在 xcode 中使用了一个预先打包的 2009 年“基于导航的应用程序”,展示了如何使用相同的视图控制器而不是合并一个新的 nib 文件来钻取表。在文章中,视图控制器被标识为“rootview”控制器。
我已经设法修改代码以使用带有 UITableViewDelegate 和 UI TableViewDataSource 的 UIViewController 类将数据从 plist 填充到表格单元格中。这并不难做到。但是,当使用 didSelectRowAtIndexPath 方法激活单元格时,我的问题就开始了。本教程的代码创建同一个表视图控制器类的新实例,更新单元格数据并将其推送到堆栈顶部以实现“向下钻取”。当我将相同的方法应用于我的控制器类时,xcode 会引发错误。诚然,我的无知是问题的可能原因。这就是我寻求帮助的原因。
实现 didSelectRowAtIndexPath 的教程代码:
//RootViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Get the dictionary of the selected data source.
NSDictionary *dictionary = [self.tableDataSource objectAtIndex:indexPath.row];
//Get the children of the present item.
NSArray *Children = [dictionary objectForKey:@"Children"];
if([Children count] == 0) {
DetailViewController *dvController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController:dvController animated:YES];
[dvController release];
} else {
//Prepare to tableview.
RootViewController *rvController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:[NSBundle mainBundle]];
//Increment the Current View
rvController.CurrentLevel += 1;
//Set the title;
rvController.CurrentTitle = [dictionary objectForKey:@"Title"];
//Push the new table view on the stack
[self.navigationController pushViewController:rvController animated:YES];
rvController.tableDataSource = Children;
[rvController release];
}
}