将tableView添加到navigationController

时间:2011-09-20 08:39:31

标签: iphone xcode uitableview uinavigationcontroller

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

[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一起使用?请帮忙...我花了很多时间用这个,我可以看到错误......谢谢提前..

2 个答案:

答案 0 :(得分:2)

首先,您不得将子视图添加到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

答案 1 :(得分:0)

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