如何覆盖我的应用程序委托方法?

时间:2013-03-15 15:49:22

标签: ios objective-c

我在app delegate中使用它来为所有视图提供旋转但在一个视图中并不是所有我都需要覆盖此方法,因此视图仅支持纵向视图

方法(delegate.m)

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
  return UIInterfaceOrientationMaskPortrait  | UIInterfaceOrientationMaskLandscape;
}

2 个答案:

答案 0 :(得分:1)

为什么不使用UIViewController本身可用的方法?

您可以根据您需要的方向在您的特定班级中使用这些方法。

- (BOOL)shouldAutorotate
- (NSUInteger)supportedInterfaceOrientations
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

在你的AppDelegate中,你已经有了这个方法,你在其他地方都不需要它。

-(NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window

{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

来自Apple Docs

  

此方法返回接口方向,以用于未明确指定其自身的任何视图控制器。如果视图控制器未覆盖supportedInterfaceOrientations或shouldAutorotateToInterfaceOrientation:方法,则使用此方法返回的方向。

     

如果您没有实现此方法,应用程序将使用应用程序Info.plist的UIInterfaceOrientation键中的值作为默认界面方向。

使用UINavigationController

时更新

在这种情况下,您需要实现自定义UINavigationController,因为您的navigationController可能会干扰您为不同的视图控制器提供的界面方向。

<强> CutomNavigationController.h

#import <UIKit/UIKit.h>

@interface CutomNavigationController : UINavigationController
@end

<强> CutomNavigationController.m

#import "CutomNavigationController.h"


@interface CutomNavigationController ()

@end

@implementation CutomNavigationController

//overriding shouldRotate method for working in navController
-(BOOL)shouldAutorotate
{

  return   [self.visibleViewController shouldAutorotate];

}

-(NSUInteger)supportedInterfaceOrientations
{

      return [self.topViewController supportedInterfaceOrientations];

}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
  return [self.topViewController preferredInterfaceOrientationForPresentation]; 
}

最后在CustomNavigationController中使用此AppDelegate,这将作为所有视图控件的navigationcontroller引用

答案 1 :(得分:0)

这应该都在视图控制器中处理。使用UIViewController方法:

- (NSUInteger)supportedInterfaceOrientations{}