下面是物。我现在有一个的TabBar控制器,里面有几个导航控制器。只是这样的:

http://tof.canardpc.com/view /d27d1361-c81b-43a0-9b5b-abb13d78e422.jpg

在我的第一导航控制器,我有称为NewsViewsController视图控制器。下面是其笔尖(见图)。

我的目标是根据分段控制的位置,以显示/隐藏子视图(具有的tableview内侧)。这样一来,我可以为每个tableview中的两个独立viewControllers。这实际上是工作。这里是结果(见图)。

我的问题是下列之一。当我尝试点击一个单元格,则pushview不起作用。事实上,我的self.navigationController为空。我怎样才能推动使用父导航控制器我的细节视图?

我的应用程序错误的架构?谢谢=)

有帮助吗?

解决方案

导航控制器是安装到PUSH和POP管理整个视图的视图控制器。实在没有什么API中容易支持多视图控制器,其视图中的相同上海华内显示。

而不是试图推动在实现代码如下子视图一个下一个视图,您应该管理从“新闻观”控制器导航。更妙的是,你应该只是“新闻观”控制器,而且实现每个表的委托和数据源单独的类(他们并不一定要在视图控制器它只是一般方便。)

像这样:

@interface NewsViewController {
    CustomClass1 *newsTableDelegateAndDataSource;
    CustomClass2 *categoryTableDelegateAndDataSource;
}

@interface CustomClass1 {
    UINavigationController *nav;
}

在NewsViewController.m

- (void) viewWillAppear{
    self.newsTableDelegateAndDataSource.nav= // reference to the navigation controller;
    self.categoryTableDelegateAndDataSource.nav = // reference to the navigation controller;
}

然后,在CustomClasses之一的didSelectRow方法:

nextViewController=// intialize or get reference to next view controller
[self.nav pushViewController:nextViewController animated:YES];

在NAV将推动上NewsViewController顶部的nextViewController并显示新的屏幕。当它完成,它弹出本身NewsViewController重新出现在你离开时的状态。

此方式,您只需要在任何时间主动一个视图控制器,因此API工程进展顺利,但你封装每个表在其自己的类的行为。

大家是高兴。

其他提示

我通过调用从子视图父方法实现了这一 - 父方法进行推

子视图:

@protocol SubUIViewDelegate
    -(void)pushViewController:(UIViewController*)ctrl;
@end

@interface ... {
   ...
   id<SubUIViewDelegate> delegate;
}
@property (nonatomic,assign) id <SubUIViewDelegate> delegate;
...
@end

然后@synthesize委托并使用以下调用从子视图

的推送
[self.delegate pushViewController : new_view_ctrl];

父视图控制器:

@interface parentview : ... <SubUIViewDelegate> {
    ...
}
-(void) pushViewController: (UIViewController*) ctrl;

指定者:

subview.delegate = self;

-(void)pushViewController:(UIViewController*)ctrl {
    [self.navigationController pushViewController:ctrl animated:YES];
}

希望这有助于。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top