通用应用程序的单个应用程序委托

时间:2011-12-15 12:30:36

标签: iphone delegates ios-universal-app

我正在做一个通用应用程序,它分别为iPhone和iPad分配了2个应用代表。我是否可以使用bool值设置为BOOL isiPhone和方法+(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];

2 个答案:

答案 0 :(得分:1)

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

所以你可能有:

MapView.xib
MapView~ipad.xib

DetailView.xib
DetailView~ipad.xib

AboutView.xib
AboutView~ipad.xib

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

答案 1 :(得分: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;

每当您需要访问代理人时。