UIViewController部分属性和方法介绍

6 篇文章 0 订阅
3 篇文章 0 订阅
// 视图对象,如果视图没被创建的话,为空
@property(nonatomic, readonly, strong) UIView *viewIfLoaded

// 视图大小
@property(nonatomic) CGSize preferredContentSize

// 如果视图没被创建的话,创建视图,开始于iOS9
- (void)loadViewIfNeeded

// 我们现在有了新的展示 viewController 的方法,-showViewController:sender: 以及 -showDetailViewController:sender:。调用这两个方法时,将顺着包括调用 vc 自身的响应链而上,寻找最近的实现了这个方法的 ViewController 来执行相应代码。在 iOS SDK 的默认实现中,在 UISplitViewController 这样的容器类中,已经有这两个方法的实现方式,而 UINavigationController 也实现了 -showViewController:sender: 的版本。对于在 navController 栈中的 vc,会调用 push 方式进行展示,而对 splitVC,showViewController:sender: 将在 MasterViewController 中进行 push。而 showDetailViewController:sender: 将根据水平方向的 Size 的情况进行选择:对于 Regular 的情况,将在 DetailViewController 中显示新的 vc,而对于 Compact 的情况,将由所在上下文情况发回给下级的 navController 或者是直接以 modal 的方式展现。
这么设计的好处是显而易见的,首先是解除了原来的耦合,使得我们的 ViewController 可以不被局限于导航控制器上下文中;另外,这几个方法都是公开的,也就是说我们的 ViewController 可以实现这两个方法,截断响应链的响应,并实现我们自己的呈现方式。这在自定义 Container Controller 的时候会非常有用。
开始于iOS8
- (void)showViewController:(UIViewController *)vc
                    sender:(id)sender
- (void)showDetailViewController:(UIViewController *)vc
                          sender:(id)sender

// 决定当前显示其它controller的controller是否提供context给presentedViewController(modalViewController),如果不,就会找上一级的controller的该值
@property(nonatomic, assign) BOOL definesPresentationContext


//是否使用视图控制器的过过渡样式
@property(nonatomic, assign) BOOL providesPresentationContextTransitionStyle

/// 是否控制键盘关闭
- (BOOL)disablesAutomaticKeyboardDismissal
// 转场的代理
@property(nonatomic, weak) id< UIViewControllerTransitioningDelegate > transitioningDelegate

// 转场对象
- (id<UIViewControllerTransitionCoordinator>)transitionCoordinator

// 获取响应事件的对象
- (UIViewController *)targetViewControllerForAction:(SEL)action
                                             sender:(id)sender
// 最近的上一个UIViewController
@property(nonatomic, readonly) UIPresentationController *presentationController

// 最近关闭的控制器
@property(nonatomic, readonly) UIPopoverPresentationController *popoverPresentationController

// 边缘约束
@property(nonatomic, assign) UIRectEdge edgesForExtendedLayout

//延伸视图是否不透明的Bar,是用来指定导航栏是透明的还是不透明,IOS7中默认是YES
@property(nonatomic, assign) BOOL extendedLayoutIncludesOpaqueBars

// 是否自动调整ScrollView的Inset
@property(nonatomic, assign) BOOL automaticallyAdjustsScrollViewInsets

// 界面显示时呈现的方向
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation

// 尝试旋转方向
+ (void)attemptRotationToDeviceOrientation

// 在两个子视图控制器中转换
- (void)transitionFromViewController:(UIViewController *)fromViewController
                    toViewController:(UIViewController *)toViewController
                            duration:(NSTimeInterval)duration
                             options:(UIViewAnimationOptions)options
                          animations:(void (^)(void))animations
                          completion:(void (^)(BOOL finished))completion

//在iOS6之后可以覆盖整个方法来关闭appearance callbacks的自动传递特性
- (BOOL)shouldAutomaticallyForwardAppearanceMethods

// 手动传递的时候你并不能直接去调用child 的viewWillAppear或者viewDidAppear这些方法,而是需要使用 beginAppearanceTransition:animated:和endAppearanceTransition接口来间接触发那些appearance callbacks,且begin和end必须成对出现
- (void)beginAppearanceTransition:(BOOL)isAppearing
                         animated:(BOOL)animated
- (void)endAppearanceTransition

// 我们可以通过调用ViewController的setOverrideTraitCollection方法为它的ChildViewController重新设置traitCollection的值。一般情况下traitCollection值从父controller传到子controller是不做修改的。当我们自己实现一个容器Controller的时候,我们可以使用这个方法进行调整。相对的,我们可以通过overrideTraitCollectionForChildViewController方法获得ChildViewController的traitCollection值。
- (void)setOverrideTraitCollection:(UITraitCollection *)collection
            forChildViewController:(UIViewController *)childViewController
- (UITraitCollection *)overrideTraitCollectionForChildViewController:(UIViewController *)childViewController



// 当一个视图控制器从视图控制器容器中被添加或者被删除之前,该方法被调用
- (void)willMoveToParentViewController:(UIViewController *)parent

// 当一个视图控制器从视图控制器容器中被添加或者被删除之后,该方法被调用
- (void)didMoveToParentViewController:(UIViewController *)parent

// 注册3D Touch的显示view
- (id<UIViewControllerPreviewing>)registerForPreviewingWithDelegate:(id<UIViewControllerPreviewingDelegate>)delegate
                                                         sourceView:(UIView *)sourceView

// 移除3D Touch

- unregisterForPreviewingWithContext:


// 3D Touch相关按钮
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems

//实现此方法来指定要控制的状态栏隐藏和取消隐藏状态
- (UIViewController *)childViewControllerForStatusBarHidden

//设置子控制器的状态栏样式
- (UIViewController *)childViewControllerForStatusBarStyle

// 是否管理状态栏
@property(nonatomic, assign) BOOL modalPresentationCapturesStatusBarAppearance

// 状态栏变化效果
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation

// 更新状态栏
- (void)setNeedsStatusBarAppearanceUpdate

// 在UITabbarController包含的UINavigationController应用中,如果UINavigationController某一页(某个level)需要隐藏Tabbar,之前的做法是在push那一页之前,将那一页的ViewController中的hidesBottombarWhenPushed参数设为YES,这样当那一页push进UINavigationController中时,底部的Tabbar就会隐藏掉
@property(nonatomic) BOOL hidesBottomBarWhenPushed

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值