Как повернуть приложение с помощью TabBar? - PullRequest
2 голосов
/ 17 февраля 2011

Привет, у меня есть приложение splitview, которое работает нормально, пока я не добавлю TabBar в раздел rootview.Проблема в том, что когда я добавляю TabBar к корневому представлению, приложение не поворачивается в альбомную ориентацию, если я меняю ориентацию, вид остается в портретном режиме.Как я могу решить это?Надеюсь, что вы можете помочь

#import "SplitViewTest3AppDelegate.h"
#import "SISACWelcomeViewController.h"

@implementation SplitViewTest3AppDelegate

@synthesize window, masterViewController, splitViewController,masterViewTabBarController, searchViewController;

#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    masterViewController = [[MasterViewController alloc] initWithStyle:UITableViewStyleGrouped];
    UINavigationController *masterNavigationController = [[UINavigationController alloc] initWithRootViewController:masterViewController];
    masterNavigationController.tabBarItem.image = [UIImage imageNamed:@"Folder.png"];

    //NewsFeedsNavigationController *newsFeedsNavigationController = [[NewsFeedsNavigationController alloc] init];
    SISACWelcomeViewController *sisacWelcomeViewController = [[SISACWelcomeViewController alloc] init];
    UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:sisacWelcomeViewController];

    searchViewController = [[UIViewController alloc] initWithNibName:@"SearchView" bundle:nil];
    searchViewController.tabBarItem.image = [UIImage imageNamed:@"Search-icon.png"];

    masterViewTabBarController = [[UITabBarController alloc] init];
    masterViewTabBarController.viewControllers = [NSArray arrayWithObjects:masterNavigationController, searchViewController, nil];

    masterViewController.detailNavigationController = detailNavigationController;

    splitViewController = [[UISplitViewController alloc] init];

    splitViewController.viewControllers = [NSArray arrayWithObjects:masterViewTabBarController, detailNavigationController, nil];

    splitViewController.delegate = sisacWelcomeViewController;

    // Add the split view controller's view to the window and display.
    [window addSubview:splitViewController.view];
    //[masterNavigationController.view addSubview:tab.view];
    [window makeKeyAndVisible];

    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
    /*
     Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
     */
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    /*
     Restart any tasks that were paused (or not yet started) while the application was inactive.
     */
}

- (void)applicationWillTerminate:(UIApplication *)application {
    /*
     Called when the application is about to terminate.
     */
}

#pragma mark -
#pragma mark Memory management

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
    /*
     Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.
     */
}

- (void)dealloc {
    [window release];
    //[tab release];
    [super dealloc];
}

@end

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Ответ ниже правильный.Если вы добавляете вкладки, которые включают использование контроллера CoreDataTableView (который используется с курсом CS193P), обязательно добавьте метод, который учитывает любую ориентацию.Если нет, ваш разделенный вид не будет работать правильно.

1 голос
/ 12 мая 2011

РЕШЕНО: У меня была та же проблема.
Без TabBar все хорошо, добавьте TabBar и разрывы вращения.
Я догадался, что что-то сломано в цепочке респондента или иерархии представления.
Так что я собирался представить как ошибку.Поэтому написал тестовое приложение для демонстрации в Apple (потому что они ВСЕГДА просят об этом), и это сработало.Ура, но почему?

Это мои выводы из документации Apple.Из руководства по программированию View для iOS.Контроллер разделенного вида «Контроллер разделенного вида всегда должен быть корнем любого интерфейса, который вы создаете».Таким образом, они не должны быть встроены в представление TabBar, хотя я понимаю, что существует обходной путь в дикой природе.

Также: создание интерфейса панели вкладок "Установите его как одно из двух корневых представлений в разделениипросмотреть интерфейс. (только для iPad) "

Решение: После гораздо большего расследования и проб и ошибок я обнаружил проблему.Конечно, это кажется очевидным СЕЙЧАС.Когда SplitView проверяет для shouldAutorotateToInterfaceOrientation, он проверяет каждое возможное представление всей иерархии, то есть КАЖДОЕ представление в MasterView, таким образом, КАЖДОЕ представление в TabBar и КАЖДОЕ представление в DetailView, таким образом КАЖДОЕ представление в текущем NavigationStack.Недостаток мази в том, что недавно созданный ViewController не поддерживает альбомную версию по умолчанию.

В чем я ошибся: я создал ВСЕ подпредставления TabBar, но еще не написал больше кода, потому что яхотел, чтобы сначала работал SplitView с TabBar, поэтому 1 из моих представлений вкладок не был изменен по умолчанию.

...