【发布时间】:2011-02-27 19:03:04
【问题描述】:
我有一个偏好,当设置时,它会强制我的应用程序在启动时执行一些同步。
我可以使用 IB 根据此设置显示不同的初始视图吗?
是否有启用此行为的标准方法?
【问题讨论】:
标签: iphone cocoa-touch xcode uiviewcontroller interface-builder
我有一个偏好,当设置时,它会强制我的应用程序在启动时执行一些同步。
我可以使用 IB 根据此设置显示不同的初始视图吗?
是否有启用此行为的标准方法?
【问题讨论】:
标签: iphone cocoa-touch xcode uiviewcontroller interface-builder
假设您在同步期间设置了应用委托的属性,在初始视图控制器的 initWithNibNamed: 方法中检查应用委托同步的值并通过调用 [super initWithNibNamed:@"thisNibInsteadOfThatNib"]; 加载适当的 nib
编辑:显示代码以根据启动时的某些条件启动不同的视图
// 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;
}
【讨论】:
applicationDidFinishLaunching: 中的同步条件初始化控制器或需要加载的视图