0

我正在做一个通用应用程序,它分别为 iPhone 和 iPad 提供 2 个应用程序代表。BOOL isiPhone我可以使用设置为 yes 之类的 bool 值和方法在单个应用程序委托中检查设备吗+(AppDelegate*)instance;?那么我怎样才能启动不同的视图呢?我有一些这样的代码片段

@interface AppDelegate : NSObject <UIApplicationDelegate, NSFetchedResultsControllerDelegate> {

UIWindow* window;
BOOL isiPhone;

@property (nonatomic, retain) IBOutlet UIWindow* window;
@property (nonatomic, assign) BOOL isiPhone;

+ (AppDelegate*)instance;

@end

在应用程序的 App Delegate m 文件中:

@synthesize m_ForIPhone;

self.MapVC = [[MapViewController alloc] initWithNibName:(self.isiPhone ? @"MapView" : @"MapView@pad") bundle:nil];
self.DetailVC = [[DetailViewController alloc] initWithNibName:self.isiPhone ? @"DetailView" : @"DetailView@pad" bundle:nil];

self.AboutVC = [[AboutViewController alloc] initWithNibName:self.isiPhone ? @"AboutView" : @"AboutView@pad" bundle:nil];
4

2 回答 2

1

您可以使用标准的方式在您的 XIB 文件名末尾附加~ipad~iphone指定 XIB 分别用于 iPad 或 iPhone。

所以你可能有:

MapView.xib
MapView~ipad.xib

DetailView.xib
DetailView~ipad.xib

AboutView.xib
AboutView~ipad.xib

它将为该平台选择最具体的一个,因此在 iPhone 上运行时你会MapView.xib被加载,而在 iPad 上它会加载MapView~ipad.xib

于 2011-12-15T12:38:34.573 回答
0

使用以下代码

id<UIApplicationDelegate> delegate = [[UIApplication sharedApplication] delegate]; 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
AppDelegate_iPad *appDelegate = (AppDelegate_iPad *) delegate;

else
AppDelegate_iPhone *appDelegate = (AppDelegate_iPhone *) delegate;

每当您需要访问委托时。

于 2011-12-15T12:37:21.310 回答