Загрузить другое начальное представление в зависимости от настроек приложения? - PullRequest
1 голос
/ 04 июня 2010

У меня есть предпочтение, которое при установке заставляет мое приложение выполнять некоторую синхронизацию при запуске.

Можно ли использовать IB для отображения другого начального вида, основанного на этом параметре?

Есть ли стандартный способ включить это поведение?

1 Ответ

3 голосов
/ 04 июня 2010

Предполагая, что у вас есть свойство в вашем делегате приложения, которое установлено во время синхронизации, в initWithNibNamed: метод начального контроллера просмотра проверьте значение, синхронизированное делегатом приложения, и загрузите соответствующий наконечник, вызвав [super initWithNibNamed:@"thisNibInsteadOfThatNib"];

РЕДАКТИРОВАТЬ: Показать код для запуска другого представления в зависимости от некоторых условий при запуске

// AppDelegate.h
#import <UIKit/UIKit.h>

@interface AppDelegate : NSObject <UIApplicationDelegate>
{
    UIWindow *window;
    UIViewController *firstViewController;
}
@property {nonatomic, retain} UIWindow *window;
@end

// AppDelegate.m
#import AppDelegate.h
#import ViewControllerOne.h
#import ViewControllerTwo.h

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    BOOL shouldLoadViewOne = \\ some value from preferences

    if (shouldLoadViewOne) {
        firstViewController = [[ViewOneController alloc] initWithNibName:@"ViewOneController" bundle:nil];
    } else {
        firstViewController = [[ViewTwoController alloc] initWithNibName:@"ViewTwoController" bundle:nil];
    }

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:firstViewController];

    [window addSubView:[navController view]];

    [window makeKeyAndVisible];

    return YES;
}

РЕДАКТИРОВАТЬ 2:

Используйте NSClassFromSting() и сохраните имя firstViewController для загрузки в настройках.

// AppDelegate.h
#import <UIKit/UIKit.h>

@interface AppDelegate : NSObject <UIApplicationDelegate>
{
    UIWindow *window;
    id firstViewController;
}
@property {nonatomic, retain} UIWindow *window;

- (NSString *)firstViewControllerName;

@end

// AppDelegate.m
#import AppDelegate.h
#import ViewControllerOne.h
#import ViewControllerTwo.h

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSString *viewControllerName = [self firstViewControllerName];

    firstViewController = [[NSClassFromString(viewControllerName) alloc] initWithNibName:viewControllerName  bundle:nil];

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:firstViewController];

    [window addSubView:[navController view]];

    [window makeKeyAndVisible];

    return YES;
}

- (NSString *)firstViewControllerName
{
    NSString *defaultViewController = @"ViewOneController";
    NSString *savedFirstViewController = // string retrieved from preferences or other persistent store

    if (!savedFirstViewController)
        return defaultViewController;

    return savedFirstViewController;
}
...