我制作了一款使用HealthKit的应用。该应用必须无法在iPad上运行,因此我的viewDidLoad
方法包含if / then / else语句,以向iPad用户显示提醒。这是我的代码:
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0") && [HKHealthStore isHealthDataAvailable] == 1) {
...
}
else {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Whoops!" message:@"Looks like your device doesn't support HealthKit :(" preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alertController animated:1 completion:^(){
NSLog(@"Showed error alert because of unsupported device.");
}];
}
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")
位来自this gist。
UIAlertController应显示设备何时是iPad,未运行iOS 8.0+,或者仅仅(由于某些其他原因)无法使用HealthKit。这在纸面上都很好,但是当我在运行iOS 8的iPad 2模拟器上运行应用程序时,应用程序正常启动并且不显示警报。为了记录,我知道警报没有按钮,但我不想让它消失。它应仅显示在iOS或低于iOS 8的设备上,因此在显示时不应该消失。
那么为什么我的应用程序没有在iPad上显示警报视图?控制台显示没有错误。
编辑:没有按钮的通知不会出现在最终产品中,只是在测试中。然而,这一点仍然存在,因为警报仍然应该出现。
答案 0 :(得分:1)
您是否检查过设备系列是否设置为通用?如果它被设置为iPhone,那么用户的习语将永远不会是iPad。使应用程序具有通用性似乎解决了此question
中提出的类似问题PS,为我的第一个答案道歉,没有正确地阅读这个问题。
答案 1 :(得分:0)
如果您只想定位iPhone,正确的方法是在部署目标中设置它
我已将此更改为仅与iPhone匹配
现在,在这种情况下,你仍然可以通过“向上扩展”方法(通过扩展iPhone版本以匹配iPad)运行iPhone应用程序。
如果在这种情况下仍然需要该警报,则可以将其放入ViewDidLoad
if (self.traitCollection.userInterfaceIdiom == UIUserInterfaceIdiomPad) {
NSLog(@"I'm an ipad");
UIAlertController *alert = [ UIAlertController alertControllerWithTitle:@"Sorry dude, no iPads" message:@"go buy an iphone" preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alert animated:YES completion:^{}];
}
在这种情况下,我使用新的traitCollection属性来确定界面习语。
如果您只是想避免使用更大的屏幕,那么我建议您根据iOS 8关注尺寸等级,这绝对是最佳选择。
http://www.learnswift.io/blog/2014/6/12/size-classes-with-xcode-6-and-swift
一个开始的地方,
当然还有apple的特质集合参考
答案 2 :(得分:0)
尝试这样的事情:
NSString *modelString = (NSString *)[UIDevice currentDevice].model;
if ([modelString hasPrefix:@"iPad"])
{
// iPad
return YES;
}
我相信即使在iPad上运行仅限iPhone的应用程序,这也应该有效。