0

事情就是这样。我目前有一个 tabBar 控制器,里面有几个导航控制器。像这样 :

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

在我的第一个导航控制器中,我有一个名为 NewsViewsController 的视图控制器。这是它的笔尖(见图)。

我的目标是根据分段控件的位置显示/隐藏子视图(里面有 tableview)。这样,我可以为每个 tableview 拥有两个单独的 viewController。这实际上是有效的。这是结果(见图)。

我的问题是以下一个。当我尝试单击一个单元格时,pushview 不起作用。事实上,我的 self.navigationController 是空的。如何使用父导航控制器推送我的详细视图?

我的应用程序架构错了吗?谢谢你=)

4

2 回答 2

0

导航控制器设置为推送和弹出管理整个视图的视图控制器。API 中确实没有任何东西可以轻松支持多个视图控制器,它们的视图显示在同一个超级视图中。

您应该从“新闻视图”控制器管理导航,而不是尝试在其中一个 tableview 子视图上推送下一个视图。更好的是,您应该只有“新闻视图”控制器,并有单独的类来实现每个表的委托和数据源(它们不必在视图控制器中,这通常很方便。)

像这样的东西:

@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];

导航会将 nextViewController 推送到 NewsViewController 之上并显示新屏幕。完成后,它会自行弹出,并且 NewsViewController 会重新出现在您离开时的状态。

这样,您在任何时候都只有一个视图控制器处于活动状态,因此 API 工作顺利,但您将每个表的行为封装在其自己的类中。

每个人都很高兴。

于 2010-04-04T15:12:46.847 回答
0

我通过从子视图调用父方法来实现这一点 - 父方法执行推送。

子视图:

@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];
}

希望这可以帮助。

于 2011-12-10T13:19:41.170 回答