【问题标题】:Add tableView to navigationController将 tableView 添加到 navigationController
【发布时间】:2011-11-20 21:24:25
【问题描述】:

在 viewDidLoad 中,我向 navigationController 添加了一个 tableview,如下所示:

[self.view addSubview:navigationController.view];
    [self.navigationController.view addSubview:tableViewRecherchePartenaire];

当从 tableview 中选择一行时,我希望这个 tableview 消失,我尝试了这样的事情:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 if(indexPath.row==0){
        NSLog(@"RecherchePartenaireTypePartenaireViewController...");


        [self.navigationController.view removeFromSuperview];

        recherchePartenaireTypePartenaireViewController=[[RecherchePartenaireTypePartenaireViewController alloc] init];
        recherchePartenaireTypePartenaireViewController.recherchePartenaireViewController=self.view;

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

但是 tableview 消失了,但是下一个视图没有出现。如何使用带有 navigationController 的表格视图?请帮助...我花了很多时间在这上面,我可以看到错误..提前谢谢..

【问题讨论】:

  • 插入 NSLog(@"%@", [recherchePartenaireTypePartenaireViewController 描述]);告诉我你可以在控制台中看到什么。
  • 你能解释一下为什么你直接在导航控制器的视图中添加一个子视图吗?与推送和弹出视图控制器相比,这样做非常少见。

标签: iphone xcode uitableview uinavigationcontroller


【解决方案1】:

首先,你不能在UINavigationController的视图中添加子视图。将您的UITableView 放在UIViewController 的子类中,并使其成为您的navigationController 的rootViewController。您可以在主 xib 文件中或以编程方式执行此操作:

navigationController.rootViewController = myTableViewController;

以后你几乎可以保持你的功能了:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if(indexPath.row==0){
        NSLog(@"RecherchePartenaireTypePartenaireViewController...");
        recherchePartenaireTypePartenaireViewController=[[RecherchePartenaireTypePartenaireViewController alloc] init];
                    [self.navigationController pushViewController:recherchePartenaireTypePartenaireViewController animated:YES];
        [recherchePartenaireTypePartenaireViewController release];
    }
} 

但是这个函数会在 myTableViewController 中。

在您的代码中,您从视图层次结构中移除了您的 navigationController 视图。所以当你推东西的时候什么都没有出现是很正常的,因为UINavigationController 通过将下一个控制器的视图推到它自己的视图上来处理推送。

这是一个很好的 Apple 示例,可以帮助您:) http://developer.apple.com/library/ios/#samplecode/TheElements/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007419

【讨论】:

  • 这个 UIViewController 的子类会只包含 tableview 吗?所以我必须在.xib上放一个tableview?并且 didSelectRowAtIndexPath 方法将在 .m 文件上?
【解决方案2】:

在您的代码中,uitableview 不是导航类型的视图。因此,当您将 UITableview 添加到导航控制器的视图时,superview 是 uitableview。在 didselectrowAtIndexPath 中,您正在推动 UITableview 而不是 NavigationController。所以制作 UITableview作为navigationtype。然后将其添加到navigationController。然后做同样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    相关资源
    最近更新 更多