如果满足以下条件,我正在尝试让我的应用停用横向:
WelcomeViewController
,LogInViewController
或SignUpViewController
我在AppDelegate.m
尝试了这个:
- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ) {
if ([[window.rootViewController presentedViewController] isKindOfClass:[WelcomeViewController class]])
return UIInterfaceOrientationMaskPortrait;
else
return UIInterfaceOrientationMaskAllButUpsideDown;
}
}
这不起作用,因为我收到错误,说Control may reach end of-non-void function
。
我也试过这个:
- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
NSString *deviceModel = (NSString*)[UIDevice currentDevice].model;
if ([deviceModel rangeOfString:@"iPhone"].location != NSNotFound && [[window.rootViewController presentedViewController] isKindOfClass:[WelcomeViewController class]]) {
NSLog(@"I am an iPhone");
return UIInterfaceOrientationMaskPortrait;
} else if ([deviceModel rangeOfString:@"iPhone"].location != NSNotFound && [[window.rootViewController presentedViewController] isKindOfClass:[LogInViewController class]]) {
NSLog(@"I am an iPhone");
return UIInterfaceOrientationMaskPortrait;
} else if ([deviceModel rangeOfString:@"iPhone"].location != NSNotFound && [[window.rootViewController presentedViewController] isKindOfClass:[SignUpViewController class]]) {
NSLog(@"I am an iPhone");
return UIInterfaceOrientationMaskPortrait;
} else {
NSLog(@"I am NOT an iPhone");
return UIInterfaceOrientationMaskAllButUpsideDown;
}
}
但是,如果我在iPhone上测试它,它会直接进入else语句,这很有意思,因为如果我删除[[window.rootViewController presentedViewController] isKindOfClass:[SignUpViewController class]]
,它就会起作用。
我做错了什么?
答案 0 :(得分:1)
自从我收到错误后,这不起作用,说控制可能会达到无效功能的结束。
好吧,想想你的逻辑(或缺乏它):
- (NSUInteger) application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
if ( UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ) {
if ([[window.rootViewController presentedViewController] isKindOfClass:[WelcomeViewController class]])
return UIInterfaceOrientationMaskPortrait;
else
return UIInterfaceOrientationMaskAllButUpsideDown;
}
}
如果UI_USER_INTERFACE_IDIOM()
为UIUserInterfaceIdiomPad
,则会在每种情况下都返回一些内容(if
和else
)。但除此之外,你不会说怎么做!如果UI_USER_INTERFACE_IDIOM()
不 UIUserInterfaceIdiomPad
怎么办?那你回来了什么?没有!所以这没有意义。您提供的信息不足。您必须涵盖所有可能的案例,无论发生什么,都会返回 。
就我个人而言,我认为你所采取的整个方式非常愚蠢。我要做的是在WelcomeViewController,LogInViewController和SignUpViewController三个类中的每一个中实现supportedInterfaceOrientations
。在每个实现中,我会准确地表达您在开始时所说的内容:如果设备是iPad,则返回任何方向,但仅当设备是iPhone时才返回纵向。是的,这涉及一些重复 - supportedInterfaceOrientations
的实现在所有三个视图控制器中都是相同的 - 但是谁在乎呢?至少它是可以理解的 - 它会起作用,这比你现在为你做的更多。