Приложение TabBar, moreNavigationBar и перья с панелями навигации - PullRequest
0 голосов
/ 01 февраля 2010

У меня есть приложение TabBar с несколькими кончиками, большинство с NavBar. Он работает довольно хорошо, за исключением «представлений», которые находятся внутри раздела «Больше» вкладки.

Как и ожидалось, он вернет NavBar к списку «Больше», а также NavBar, который я поместил в перо.

Я пытался удалить контроллеры представления из moreNavigationBar и установить верхний контроллер из navBar моего пера, но я получаю и дополнительное представление откуда-то:

- (void)viewDidLoad {    
    TestAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    UITabBarController *ctrl = appDelegate.rootController;

    UINavigationController *navCtrl = ctrl.moreNavigationController;

    [navCtrl popToRootViewControllerAnimated: NO];
    [navCtrl pushViewController: navController.topViewController animated: YES];
    navController = navCtrl;
 [super viewDidLoad];
}

Мой AppDelegate:

@interface TestAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
 UITabBarController *rootController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *rootController;

Перо MainWindow - это проект на основе окна с TabBarController, связанный с rootController в моем делегате приложения.

У других перьев есть view + navigationController, и у меня есть подкласс UITableViewController в качестве моего Root View Controller.

Если бы я мог заставить это работать, это не решило бы мою проблему, потому что я хочу позволить пользователю поместить это где-нибудь в tabBar, таким образом, я должен иметь некоторый способ узнать, есть ли навигационная панель.

Итак, мой вопрос: как вы узнаете, есть ли навигационная панель (в данном случае, если отображается навигационная панель вкладки) и, если да, как заставить мой навигационный контроллер «стать» навигационным контроллером вкладки?

Или, если у вас есть другая идея о том, как решить эту проблему, я также был бы признателен:)

1 Ответ

1 голос
/ 02 февраля 2010

Рекомендация Apple состоит в том, что у вас есть контроллер TabBar, содержащий контроллеры навигации, а не наоборот. У меня более или менее похожая настройка, и у меня есть вкладка «Дополнительно», на которой находится контроллер Nav, в основном, такой:

@interface SomethingNavViewController : UIViewController {
    UIView* aview;
    UINavigationController *navigationController;
}
@property (nonatomic, retain) IBOutlet UIView *aview;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;

@end

В NIB у меня есть отдельный контроллер Nav в виде панели more, я не заменил представление элемента панели вкладок на представление контроллера Nav, я только добавил контроллер Nav в представление.

В моем файле реализации у меня есть:

- (void)viewDidLoad {
    [super viewDidLoad];
    [[self view] addSubview:[navigationController view]];
    SomeOtherController *aController = [[[SomeOtherController alloc ] initWithNibName:@"SomeOtherController" bundle:nil ] autorelease];
    aController.title = @"Artwalks";
        // lots of application logic here.
    [self.navigationController pushViewController:aController animated:YES];
    [self.navigationController setDelegate:self];
}

Одним из ключевых моментов этого является то, что я реализовал метод делегирования navigController, который очень удобен, когда вы просто вставляете контроллер nav. Когда я этого не делал, мои представления не получают сообщений viewDidAppear, поэтому я реализовал протокол и добавил этот метод:

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([viewController respondsToSelector:@selector(viewDidAppear:)]) {
        [viewController viewDidAppear:animated];
    }
}

и это решило множество моих давних проблем.

В любом случае, я надеюсь, что этот ответ дал вам детали, которые вам нужны. Если это не так, пожалуйста, дайте более подробную информацию о вашем вопросе. Я не совсем уверен, что , но я получаю и дополнительное представление откуда-то встретил, но это звучит как то, с чем я столкнулся, прежде чем нашел это решение.

...