【问题标题】:iphone UITableVIew (Navigation-based )iphone UITableVIew(基于导航)
【发布时间】:2011-05-01 12:46:28
【问题描述】:

我正在开发一个基于导航的应用程序。 我的 rootViewController 包含 3 个单元格 - 当第一个被按下时,一个 UIViewController 被按下(这个工作) - 问题在于应该推送 UITableViewController 的第 2 和第 3 个单元格

应用程序运行时没有错误,也没有崩溃,但是当我导航到 tableview 时,会看到一个空表,其中没有任何元素。

这部分代码有问题吗? :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    UIViewController *detailViewController = [[UIViewController alloc] initWithNibName:@"Introduction" bundle:nil];
    detailViewController.title=@"Introduction";

    UITableViewController *myPictures = [[UITableViewController alloc] initWithNibName:@"Pictures" bundle:nil];
    myPictures.title=@"Pictures";

    UITableViewController *myImages = [[UITableViewController alloc] initWithNibName:@"ImagesViewController" bundle:nil];
    myImages.title=@"Images";

    // Pass the selected object to the new view controller.
    if (0 == indexPath.row)
    [self.navigationController pushViewController:detailViewController animated:YES];

    if (1== indexPath.row)
    [self.navigationController pushViewController:myPictures animated:YES];

    if (2== indexPath.row)
    [self.navigationController pushViewController:myImages animated:YES];

    [detailViewController release];
    [myPictures release];   
    [myImages release];

【问题讨论】:

  • 只有在选择了相应的行以最小化内存占用时,才应该创建视图控制器的实例。你能解释一下“但是当我导航到表格视图时”是什么意思吗?你的意思是,通过单击应该显示 viewController 的单元格?

标签: iphone uitableview xcode4 navigationcontroller


【解决方案1】:

你做错了什么(除了你原来的问题)。为什么要实例化每个视图控制器,然后仅使用基于当前“单元格选择”的视图控制器?这将减慢您的应用程序的速度,具体取决于加载这些单独视图中的每一个所需的时间。您应该只在“if (indexPath.row == 2) {”块内部实例化相关的视图控制器。

除此之外,您的方法还有很多问题。您正在做的事情永远不会起作用,因为实例化通用 UITableViewController(即使您提供自己的 nib)显然只会向您显示一个空视图。您需要有一个自己的类,将 nib 作为委托绑定到该类,然后为 TableView 提供数据。

我相信当你创建这些 nib 文件(例如“Pictures”)时,xcode 也会给你一个“PicturesViewController.h 和 PicturesViewController.m”文件?如果是这样,你需要在那里编写适当的代码并确保 Tableview 在“图片”nib 文件的“数据源”和“委托”设置为“图片视图控制器”。然后,当您想显示该视图时,请改为:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (indexPath.row == 1) {
        ...
    } else if (indexPath.row == 2) {
     PicturesViewController *myPictures = [[PicturesViewController alloc] initWithNibName:@"Pictures" bundle:nil];

     [self.navigationController pushViewController:myPictures animated:YES];
     [myPictures release];
    }

} 

【讨论】:

  • 感谢您的回复,好吧,我更正了我的代码 + 在我的 picturesviewcontroller.h &.m 我使用了要显示的项目数组,并且“图片”nib 文件中的 tableview 有它的“数据源” ' 和 'delegate' 设置为 'picturesviewcontroller'。但是你的代码给出了一个错误“意外的界面图片视图控制器”我该怎么做:“你需要有一个你自己的类,笔尖作为一个委托绑定到它,然后它将为 TableView 提供数据。”
  • 不看你的代码我不能说。然而,这仅仅意味着你以不同的方式命名你的类,并且你正在逐字使用我的代码,这是行不通的。那只是作为一个例子。请将我代码中的所有类名替换为您正在使用的实际名称。也将不胜感激“接受”答案。
  • lool .. 我还是 iphone dev 的新手,但我并没有那么愚蠢地使用与你作为示例相同的类名称:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
相关资源
最近更新 更多