Извлечение UIViewController, содержащего UITabBarController, из UINavigationController - PullRequest
1 голос
/ 21 июля 2011

У меня есть UINavigationController (a), который помещает UIViewController (b) в стек. (б) содержит UITabBarController (с). (c) имеет 5 вкладок, и любой из этих ViewControllers (d, e, f, g, h) должен иметь возможность вытолкнуть (b) из стека.

Я пробовал [[self.parentViewController navigationController] popViewControllerAnimated: YES]; кроме всего прочего, ни один из которых не работает. Есть идеи?

Edit:

.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;

1 Ответ

2 голосов
/ 21 июля 2011

У меня возникла похожая проблема (если я получу вопрос).Можете ли вы объявить свой UIViewController (b) подклассом UITabBarController?Обратите внимание, что UITabBarController является подклассом UIViewController, поэтому вы можете продолжать использовать его как обычный UIViewController.Таким образом, вы будете иметь (б) и (в) в одном контроллере.
Теперь [self.navigationController popViewController]; должно работать.
По крайней мере, я так решил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...