UIViewController

在MVC设计模式中,控制器负责向模型Model申请数据,同时负责控制数据显示到相应的视图View上。

UIViewController是所有控制器的根类,常见的子类有UITableViewController、UICollectionViewController、UINavigationController、UITabbarController等。在App开发过程中,有3种创建控制器的方法,分别是:

通过代码创建控制器(常用)。
通过XIB创建控制器。
通过Storyboard创建控制器。

在Xcode中创建控制器类,继承自UIViewController
// 实例化这个控制器类,并设置为窗口window的根控制器,最后显示出来。
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    MYViewController *rootVc = [[MYViewController alloc] init];
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.rootViewController = rootVc;
    [self.window makeKeyAndVisible];
    return YES;
}

控制器的生命周期

所谓控制器的生命周期,通俗来讲,就是控制器的创建、视图的加载与显示,以及控制器的销毁等操作。

// 控制器初始化方法
-(instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil;
-(nullable instancetype)initWithCoder:(NSCoder *)sDecoder;
// 控制器视图加载与显示方法
-(void)loadView;
-(void)viewDidLoad;
-(void)viewWillApper:(BOOL)animated;
-(void)viewDidApper:(BOOL)animated;
-(void)viewWillDisapper:(BOOL)animated;
-(void)viewDidDisapper:(BOOL)animated;
-(void)viewWillLayoutSubviews NSAVAILABLE_IOS(5_0);
-(void)viewDidlLayoutSubviews NSAVAILABLE_IOS(5_0);
// 控制器销毁时调用的相关方法。
-(void)dealloc;

使用代码切换控制器

1.切换新的控制器
// 通过代码切换控制器的时候,需要首先创建一个目标控制器对象,然后再使用presentViewController方法进行切换。
-(void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void(^ __nullable)(void))completion;
// 示例
-(void)touchesBegan:(NSSet<UITouch *>)touches withEvent:(UIEvent *)event {
    UIViewController  *newVC = [[UIViewController alloc] init];
    newVC.view.backgroundColor = [UIColor redColor];
    [self presentViewController:newVC animated:YES completion:nil];
}
2.返回原控制器
// 当需要返回原控制器时,调用dismissViewControllerAnimated:方法,此时该控制器对象会被销毁。
-(void)dismissViewControllerAnimated:(BOOL)flag completion:(void(^ __nullable)(void))completion;
-(void)touchesBegan:(NSSet<UITouch *>)touches withEvent:(UIEvent *)event {
    UIViewController  *newVC = [[UIViewController alloc] init];
    newVC.view.backgroundColor = [UIColor redColor];
    [self presentViewController:newVC animated:YES completion:^{
        dispatch_after(dispatch_time(SIDPATCH_TIME_NOW. (int64_t)(3.0*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self dismissViewControllerAnimated:newVC completion:mil];
        });
    }];
}

控制器嵌套

// 获取父控制器对象中所有的子控制器,返回一个数组。
@property(nonatomic, readonly) NSArray *childViewControllers;
// 添加子控制器
-(void)addChildViewController:(UIViewController *)childController NS_AVAILABLE_IOS(5_0);
// 移除子控制器
-(void)removeFromParentViewController NS_AVAILABLE_IOS(5_0);

父控制器和子控制之间可以建立通信机制,例如:当点击子控制器上的某个按钮时,通知父控制器跳转到一个新的控制器。父子控制器之间的通信方式可以采用以下两种方式。

代理:在子控制器的类中,添加代理属性和代理方法,并在父控制器中实现代理方法。
通知:当子控制器某个事件发生时,需要通知多个对象时,即一对多,也可以采用通知的方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值