【问题标题】:objective C way to detect if the used device is an iPod检测使用的设备是否为 iPod 的客观 C 方法
【发布时间】:2012-02-26 06:40:44
【问题描述】:

我正在尝试寻找一种方法来检测所使用的设备是否是 iPod touch,有吗?

我在 iPad 上使用这种方法...

if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) {
     ....
}

【问题讨论】:

标签: objective-c ios xcode4.2 ipod-touch


【解决方案1】:

我过去利用的一个粗略的技巧是查询设备是否可以拨打电话#。我忘记了语法,但应该有类似

if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tel:+11111"]]) {
  //we have an iphone
} else if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad) {
  //We have an iPad....
} else {
  //We probably have an iPod....
}

老实说,我更喜欢这种方法而不是绝对检测,因为它关注的是设备的功能而不是模型。最好根据设备的功能而不是模型来条件化逻辑,因为您永远不知道将来的 iOS 设备版本中会引入哪些功能。例如,如果设备类型 == iPad,则隐藏视频控件在一年多前还具有实际意义,但当 iPad2 在几个月内推出时,该功能就会受到限制。如果您仅仅因为设备是 iPod 就假设您应该或不应该执行 X 功能,那么如果添加该功能,您将在产品的进一步版本中限制功能。

【讨论】:

  • 这不是判断它是否是 iPod 的最佳方法(请参阅我的回答),但它是我所说的特征检测的一个很好的例子,这通常是更好的做法。
  • 我同意@NickLockwood ...不是最好的方式!
  • 确实,这不是检测特定设备的最佳方法,但总体而言可以为您提供更好的前向兼容性。
【解决方案2】:

你为什么想知道?如果是因为您想知道是否有相机或可以拨打电话等,那么您最好通过功能检测来执行此操作(以防Apple在某些时候制作带有电话的iPod!)例如Cliff's回答。

如果是出于其他原因,而您确实只是想知道它是 iPod 还是 iPhone,无论实际设备功能如何,您都可以这样做:

if ([[UIDevice currentDevice].model isEqualToString:@"iPod touch"])
{
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2012-02-08
    • 2017-11-17
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多