将视图控制器推入导航控制器的问题

Posted

技术标签:

【中文标题】将视图控制器推入导航控制器的问题【英文标题】:Problem in pushing a view controller into a navigationController 【发布时间】:2011-09-20 07:39:19 【问题描述】:

我需要一些帮助。在我的 Iphone App 中,我做了这样的事情: .

选择距离后,我需要显示另一个视图,如下所示:

我是这样做的:

在头文件中

@interface RecherchePartenaireViewController : UIViewController <UINavigationControllerDelegate>

    UINavigationController *navigationController;
    UITableView *tableViewRecherchePartenaire;
    RecherchePartenaireTypePartenaireViewController *recherchePartenaireTypePartenaireViewController;
    RecherchePartenaireDistanceViewController *recherchePartenaireDistanceViewController;

@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UITableView *tableViewRecherchePartenaire;
@property (nonatomic, retain) IBOutlet  RecherchePartenaireTypePartenaireViewController *recherchePartenaireTypePartenaireViewController;
@property (nonatomic, retain) IBOutlet RecherchePartenaireDistanceViewController *recherchePartenaireDistanceViewController;

@end

在实现文件中

- (void)viewDidLoad


    listData = [[NSMutableArray alloc] initWithObjects:@"Type de Partenaire", @"Code postal", @"Ville",@"Distance",@"Nom du Partenaire",@"Audi R8 uniquement",nil];
    NSLog(@"hey %@",listData);
    tableViewRecherchePartenaire.backgroundColor = [UIColor clearColor];   
    navigationController=[[UINavigationController alloc] init];

    CGRect newRect = navigationController.view.frame;
    newRect.size.height -= [UIScreen mainScreen].applicationFrame.origin.y;
    [navigationController.view setFrame:newRect];
    [navigationController setNavigationBarHidden:YES];
    [super viewDidLoad];

选择表的第三行时,我这样做:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    
        if (indexPath.row==3)
            NSLog(@"RecherchePartenaireDistanceViewController..."); 
            recherchePartenaireDistanceViewController = [[RecherchePartenaireDistanceViewController alloc]  init];
          recherchePartenaireDistanceViewController.recherchePartenaireViewController=self;

            [self.navigationController pushViewController:recherchePartenaireDistanceViewController animated:YES];

        

    

请告诉我哪里出错了,因为这似乎不起作用。谢谢。

【问题讨论】:

我没有在父对象中看到导航控制器... 如果我把这个:[self.view addSubview:navigationController.view];在 viewDidLoad 中,tableview 未选中...在 tableview 上我有一些要更改的文本字段,并且使用此行,键盘没有出现...那么,我该怎么办? 可以这样推送:[self presentModalViewController: recherchePartenaireDistanceViewController animated:YES]; 我这样视图是从下往上看的。 ..我希望视图从右到左显示,而不是从下到上..我该怎么做? 检查UIModalTransitionStyle modalTransitionStyle...但是没有这种风格。 【参考方案1】:

该方法是使用第一个 tableView 作为其 rootViewController 的 navigationController 对象。在 didSelectRowAtIndexPath: 方法上,像现在一样继续。这将推动 detailViewController。在你的 rootViewController 中,隐藏导航栏。

【讨论】:

【参考方案2】:

从 cmets 移动到这里。

您应该将导航控制器添加到您的根视图,否则您将无法调用方法pushViewConroller:

例如,您可以通过以下方式创建根视图控制器:

RootViewController *controller = [[RootViewController alloc] init];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
[controller release];

例如,您可以通过以下方式推送导航控制器:

[self presentModalViewController:navController animated:YES];

【讨论】:

以上是关于将视图控制器推入导航控制器的问题的主要内容,如果未能解决你的问题,请参考以下文章

在推入导航控制器的控制器中添加子视图控制器

当视图控制器弹出或推入导航控制器堆栈时如何获得通知

将相同的视图控制器推入堆栈有奇怪的行为

单击按钮导航到根视图控制器

推入导航堆栈时隐藏 TabBar 并在弹出导航堆栈时将其返回

如何从导航堆栈中的任何位置弹出到任意视图控制器