如果设备是iPhone

时间:2015-05-01 00:33:48

标签: ios objective-c iphone

如果满足以下条件,我正在尝试让我的应用停用横向:

  • 该设备是iPhone
  • 展示的视图控制器为WelcomeViewControllerLogInViewControllerSignUpViewController

我在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]],它就会起作用。

我做错了什么?

1 个答案:

答案 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,则会在每种情况下都返回一些内容(ifelse)。但除此之外,你不会说怎么做!如果UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPad怎么办?那你回来了什么?没有!所以这没有意义。您提供的信息不足。您必须涵盖所有可能的案例,无论发生什么,都会返回

就我个人而言,我认为你所采取的整个方式非常愚蠢。我要做的是在WelcomeViewController,LogInViewController和SignUpViewController三个类中的每一个中实现supportedInterfaceOrientations。在每个实现中,我会准确地表达您在开始时所说的内容:如果设备是iPad,则返回任何方向,但仅当设备是iPhone时才返回纵向。是的,这涉及一些重复 - supportedInterfaceOrientations的实现在所有三个视图控制器中都是相同的 - 但是谁在乎呢?至少它是可以理解的 - 它会起作用,这比你现在为你做的更多。