We updated our SDK to iOS 8.3, and all of a sudden, our iPad detection method doesn't work properly:
+ (BOOL) isiPad
{
#ifdef UI_USER_INTERFACE_IDIOM
return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
#endif
return NO;
}
the ifdef
block is never entered, and so return NO;
is always run. How do I detect if the device is an iPad without using UI_USER_INTERFACE_IDIOM()
?
I'm using:
Also, to check which version of iPadOS your iPad is using, go to Settings, Software Update, and your iPad will display which version you are on.
Apple's iPhone runs the iOS operating system, while iPad run iPadOS—based on iOS.
In 8.2
UserInterfaceIdiom()
is
#define UI_USER_INTERFACE_IDIOM() ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone)
In 8.3
UserInterfaceIdiom()
is
static inline UIUserInterfaceIdiom UI_USER_INTERFACE_IDIOM() {
return ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ?
[[UIDevice currentDevice] userInterfaceIdiom] :
UIUserInterfaceIdiomPhone);
}
So #ifdef UI_USER_INTERFACE_IDIOM
is always false in 8.3
Note that the header says
The UI_USER_INTERFACE_IDIOM() function is provided for use when deploying to a version of the iOS less than 3.2. If the earliest version of iPhone/iOS that you will be deploying for is 3.2 or greater, you may use -[UIDevice userInterfaceIdiom] directly.
So suggest you refactor to
+ (BOOL) isiPad
{
static BOOL isIPad = NO;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
isIPad = [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad;
});
return isIPad;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With