【发布时间】:2011-07-20 20:18:58
【问题描述】:
我有一个 UINavigationController(a) 将 UIViewController(b) 推送到堆栈上。 (b) 包含一个 UITabBarController(c)。 (c) 有 5 个选项卡,并且这些 ViewControllers(d,e,f,g,h) 中的任何一个都需要能够从堆栈中弹出 (b)。
我试过 [[self.parentViewController navigationController] popViewControllerAnimated:YES];在许多其他事情中,这些似乎都不起作用。有什么想法吗?
编辑:
.h 文件:
@interface MATabViewController : UIViewController<UITabBarControllerDelegate> {
UIViewController *ref;
}
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet UIImageView *imgViewFooter;
@end
.m:
#import "MATabViewController.h"
@implementation MATabViewController
@synthesize tabBarController = _tabBarController;
@synthesize imgViewFooter;
- (void)viewDidLoad
{
[super viewDidLoad];
self.view = self.tabBarController.view;
self.tabBarController.delegate = self;
self.imgViewFooter.frame = CGRectMake(0.0f, 395.0f, 320.0f, 64.0f);
[self.tabBarController.view addSubview:self.imgViewFooter];
self.tabBarController.selectedIndex = 0;
ref = [[self.tabBarController viewControllers] objectAtIndex:0];
}
-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
NSInteger index = [[tabBarController viewControllers] indexOfObject:viewController];
switch (index) {
case 0:
self.imgViewFooter.image=[UIImage imageNamed:@"footer_full.png"];
break;
case 1:
self.imgViewFooter.image=[UIImage imageNamed:@"footer_full.png"];
break;
case 2:
self.imgViewFooter.image=[UIImage imageNamed:@"footer_full.png"];
break;
case 3:
self.imgViewFooter.image=[UIImage imageNamed:@"footer_full.png"];
break;
case 4:
self.imgViewFooter.image=[UIImage imageNamed:@"footer_full.png"];
break;
default:
break;
}
return YES;
}
-(void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (ref != viewController) {
[ref viewDidDisappear:YES];
ref = viewController;
[viewController viewDidAppear:YES];
}
}
@end
请注意我在这一行中的主要技巧:
self.view = self.tabBarController.view;
【问题讨论】:
-
您的意思是要从 (d-h) 跳回 (a) 吗?如果是这样,
[self.navigationController popToRootViewControllerAnimated:YES]应该可以解决问题,因为所有视图都应该继承与根堆栈中相同的导航控制器 -
是的,这不起作用,不幸的是......我刚刚尝试过。我认为 (b) 需要调用它,但我似乎无法让它...
-
这只是一个猜测,但
[[[[self.tabBarController parentViewController] navigationController] popViewControllerAnimated:YES]可能是更直接的路线。它几乎告诉(d-h)视图控制器调用它们的父 tabBarController,然后调用它的父级,然后是导航控制器 -
感谢回复,但还是不行……:(
-
你想要达到的不是好的应用设计。谁调用popViewController?我猜在每个视图控制器的标签栏视图中都有一个后退按钮,对吧?假设用户一直在切换标签——他可能认为后退按钮会引导他进入之前选择的标签,你不同意吗?即使你找到了让它工作的方法,我建议你找到另一种方法来组织你的界面。
标签: iphone objective-c ios xcode