Мне кажется, вы пытаетесь сопоставить теги без «/» в конце. Попробуйте следующее:
<([a-zA-Z][a-zA-Z0-9]*)[^>]*(?<!/)>
Вы можете проверить rangeOfString, чтобы увидеть, что iPad существует именно так.
NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;
if ([deviceModel rangeOfString:@"iPad"].location != NSNotFound) {
NSLog(@"I am an iPad");
} else {
NSLog(@"I am not an iPad");
}
*
В swift 3.0
blockquote>*
if UIDevice.current.userInterfaceIdiom == .pad { //pad } else if UIDevice.current.userInterfaceIdiom == .phone { //phone } else if UIDevice.current.userInterfaceIdiom == .tv { //tv } else if UIDevice.current.userInterfaceIdiom == .carPlay { //CarDisplay } else { //unspecified }
Еще один метод Swifty:
//MARK: - Device Check
let iPad = UIUserInterfaceIdiom.Pad
let iPhone = UIUserInterfaceIdiom.Phone
@available(iOS 9.0, *) /* AppleTV check is iOS9+ */
let TV = UIUserInterfaceIdiom.TV
extension UIDevice {
static var type: UIUserInterfaceIdiom
{ return UIDevice.currentDevice().userInterfaceIdiom }
}
Использование:
if UIDevice.type == iPhone {
//it's an iPhone!
}
if UIDevice.type == iPad {
//it's an iPad!
}
if UIDevice.type == TV {
//it's an TV!
}
Для последних версий iOS просто добавьте UITraitCollection
:
extension UITraitCollection {
var isIpad: Bool {
return horizontalSizeClass == .regular && verticalSizeClass == .regular
}
}
, а затем в UIViewController
просто проверьте:
if traitCollection.isIpad { ... }
Вы также можете использовать это
#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
...
if (IPAD) {
// iPad
} else {
// iPhone / iPod Touch
}
Я обнаружил, что некоторое решение не работает для меня в Simulator в Xcode. Вместо этого это работает:
NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;
if ([[deviceModel substringWithRange:NSMakeRange(0, 4)] isEqualToString:@"iPad"]) {
DebugLog(@"iPad");
} else {
DebugLog(@"iPhone or iPod Touch");
}
if UIDevice.current.model.hasPrefix("iPad") {
print("iPad")
} else {
print("iPhone or iPod Touch")
}
Также в «других примерах» в Xcode модель устройства возвращается как « iPad Simulator ', поэтому вышеупомянутая настройка должна разобраться в этом.
hasSuffix:@"iPad"
вместо isEqualToString@"iPad"
... лучше всего зарегистрировать модель устройства, которую симулятор вернется и уйдет оттуда ...
– Albert Renshaw
14 November 2012 в 23:31
userInterfaceIdiom
- «Доступно в iOS 3.2 и более поздних версиях». так что это не должно быть проблемой.
– Dschee
26 December 2015 в 11:16
.Phone
вместо .Pad
.
– Dschee
26 December 2015 в 11:20
Много способов сделать это в Swift:
Мы проверим приведенную ниже модель (мы можем делать только чувствительный к регистру поиск здесь):
class func isUserUsingAnIpad() -> Bool {
let deviceModel = UIDevice.currentDevice().model
let result: Bool = NSString(string: deviceModel).containsString("iPad")
return result
}
Мы проверяем модель ниже (здесь мы можем делать чувствительный к регистру / нечувствительный поиск):
class func isUserUsingAnIpad() -> Bool {
let deviceModel = UIDevice.currentDevice().model
let deviceModelNumberOfCharacters: Int = count(deviceModel)
if deviceModel.rangeOfString("iPad",
options: NSStringCompareOptions.LiteralSearch,
range: Range<String.Index>(start: deviceModel.startIndex,
end: advance(deviceModel.startIndex, deviceModelNumberOfCharacters)),
locale: nil) != nil {
return true
} else {
return false
}
}
UIDevice.currentDevice().userInterfaceIdiom
ниже возвращает iPad только в том случае, если приложение предназначено для iPad или Universal. Если это приложение для iPhone, запущенное на iPad, то этого не произойдет. Поэтому вы должны проверить модель. :
class func isUserUsingAnIpad() -> Bool {
if UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad {
return true
} else {
return false
}
}
Этот фрагмент ниже не компилируется, если класс не наследует UIViewController
, иначе он отлично работает. Несмотря на то, что UI_USER_INTERFACE_IDIOM()
возвращает iPad только в том случае, если приложение предназначено для iPad или Universal. Если это приложение для iPhone, запущенное на iPad, то этого не произойдет. Поэтому вы должны проверить модель. :
class func isUserUsingAnIpad() -> Bool {
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.Pad) {
return true
} else {
return false
}
}
UI_USER_INTERFACE_IDIOM () возвращает iPad только в том случае, если приложение предназначено для iPad или Universal. Если его приложение iPhone работает на iPad, это не будет. Поэтому вы должны проверить модель.
Будьте осторожны: если ваше приложение предназначено только для устройства iPhone, iPad, работающий с совместимым с iphone режимом, вернет false для следующего утверждения:
#define IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
Правильный способ обнаружения физического устройства iPad:
#define IS_IPAD_DEVICE ([(NSString *)[UIDevice currentDevice].model hasPrefix:@"iPad"])
if(UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.pad)
{
print("This is iPad")
}else if (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiom.phone)
{
print("This is iPhone");
}
Это часть UIDevice с iOS 3.2, например ::
[UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad
Многие ответы хороши, но я использую это как в быстрых 4
struct App {
static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
}
if App.isRunningOnIpad {
return load(from: .main, identifier: identifier)
} else {
return load(from: .ipad, identifier: identifier)
}
Изменить: поскольку предлагаемый Cœur просто создает расширение на UIDevice
extension UIDevice {
static let isRunningOnIpad = UIDevice.current.userInterfaceIdiom == .pad ? true : false
}
App
, если вы можете сделать то же самое с расширением UIDevice
?
– Cœur
6 February 2018 в 05:19
Почему так сложно? Вот как я это делаю ...
Swift 4:
var iPad : Bool {
return UIDevice.current.model.contains("iPad")
}
Таким образом вы можете просто сказать if iPad {}
UI_USER_INTERFACE_IDIOM()
эквивалентно([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone)
. Возможно, вам лучше кэшировать результат где-то:BOOL iPad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad; … if (iPad) …
. – Marcelo Cantos 16 February 2013 в 02:04if UIDevice.currentDevice().userInterfaceIdiom == .Pad
– Pang 9 August 2014 в 05:30["I am not an iPad" rangeOfString:@"iPad"].location != NSNotFound
возвращает значение true. – Cœur 6 February 2018 в 05:13