один делегат приложения для универсальных приложений - PullRequest
0 голосов
/ 15 декабря 2011

Я делаю универсальное приложение, которое имеет 2 делегата приложения отдельно для iPhone и iPad.Можно ли проверить устройство в одном делегате приложения, используя значение bool, установленное на yes, например, 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

И в файле приложения делегата 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 ]

1 голос
/ 15 декабря 2011

Вы можете просто использовать стандартный способ добавления ~ipad или ~iphone в конец имен файлов XIB, чтобы указать, что 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.

0 голосов
/ 15 декабря 2011

Используйте следующий код

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;

всякий раз, когда вам требуется доступ к делегату.

...