我正在制作一个使用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上显示警报视图?控制台显示没有错误 .
编辑:没有按钮的通知将不在最终产品中,仅在测试中 . 然而,这一点仍然存在,因为警报仍应显示出来 .
3 回答
您是否检查过设备系列是否设置为通用?如果将其设置为iPhone,则用户习惯用法永远不会是iPad . 使应用程序通用似乎解决了这个问题question
PS,我的第一个答案道歉没有正确地阅读这个问题 .
如果您只想定位iPhone,正确的方法是在部署目标中设置它
我已将此更改为仅与iPhone匹配
现在,就是这样,你仍然可以通过“向上扩展”方法(通过扩展iPhone版本以匹配iPad)来运行运行iPhone应用程序的iPad .
如果在这种情况下仍然需要该警报,则可以将其放在ViewDidLoad中
在这种情况下,我使用新的traitCollection属性来确定接口习语 .
如果您只是想避免使用更大的屏幕,那么我建议您根据iOS 8关注尺寸等级,这绝对是最佳选择 .
http://www.learnswift.io/blog/2014/6/12/size-classes-with-xcode-6-and-swift
一个开始的地方,
当然还有苹果的特质收集参考
https://developer.apple.com/library/IOs/documentation/UIKit/Reference/UITraitSet_ClassReference/index.html
尝试这样的事情:
我相信即使在iPad上运行仅限iPhone的应用程序,这也应该可行 .