为什么view在,viewController不在(因为viewController被销毁所以不能处理业务逻辑)? 1.只添加了控制器的view并没有添加控制器,控制器没有强引用被销毁

解决方案:
1.在顶层ViewController设置强引用(强烈不推荐)
2.使用父子控制器(UIViewController管理子UIViewController)

ViewController.m
- (void)viewDidLoad {
    [super viewDidLoad];
    //添加子控制器到父控制器
    // 社会
    ScoietyViewController *scoietyVc = [[ScoietyViewController alloc] init];
    scoietyVc.title = @"社会";
    [self addChildViewController:scoietyVc];
    // 头条
    TopLineViewController *topLineVc = [[TopLineViewController alloc] init];
    topLineVc.title = @"头条";
    [self addChildViewController:topLineVc];
    // 热点
    HotViewController *hotVc = [[HotViewController alloc] init];
    hotVc.title = @"热点";
    [self addChildViewController:hotVc];
    //设置按钮内容
    NSInteger count = self.titleContainView.subviews.count;
    for (int i = 0; i < count; i++) {
        UIButton *btn = self.titleContainView.subviews[i];
        //获取当前控制器对象
        UIViewController *vc = self.childViewControllers[i];
        [btn setTitle:vc.title forState:UIControlStateNormal];
// 点击标题按钮
- (IBAction)showChildVcView:(UIButton *)sender {
    // 移除之前控制器的view
    [self.containView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
//    for (UIView *vcView in self.containView.subviews) {
//        [vcView removeFromSuperview];
//    }
    // 把对应子控制器的view添加上去
    UIViewController *vc = self.childViewControllers[sender.tag];
    vc.view.backgroundColor = sender.backgroundColor;
    vc.view.frame = self.containView.bounds;
    [self.containView addSubview:vc.view];
ViewController.m
@implementation ViewController
// UIViewController也是可以管理子控制器
- (void)viewDidLoad {
    [super viewDidLoad];
    // 添加一个子控制器
    ChildViewController *childVc = [[ChildViewController alloc] init];
    childVc.view.backgroundColor = [UIColor greenColor];
    childVc.view.frame = CGRectMake(50, 50, 200, 200);
    [self.view addSubview:childVc.view];
    [self addChildViewController:childVc];   
ChildViewController.m
@implementation ChildViewController
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    NSLog(@"点击了子控制器的view %@",self.navigationController);
    //点击了子控制器的view <UINavigationController: 0x7f8adc029a00>
    UIViewController *vc = [[UIViewController alloc] init];
    vc.view.backgroundColor = [UIColor redColor];
    /* 获取导航控制器
    1.首先去判断下自己是否是导航控制器的子控制器,
    2.否,判断父控制器是否是导航控制器的子控制器,
    3.否,直到没有父控制器为止
    [self.navigationController pushViewController:vc animated:YES];
 
ViewController.m
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    ModalViewController *vc = [[ModalViewController alloc] init];
    vc.view.backgroundColor = [UIColor redColor];
    [self presentViewController:vc animated:YES completion:nil];
ModalViewController.m
- (void)viewDidLoad {
    [super viewDidLoad];
    ChildViewController *childVc = [[ChildViewController alloc] init];
    childVc.view.backgroundColor = [UIColor blueColor];
    childVc.view.frame = CGRectMake(50, 50, 200, 200);
    [self.view addSubview:childVc.view];
    [self addChildViewController:childVc];
ChildViewController.m
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    NSLog(@"点击子控制器的view");
    // 判断下当前方法调用者是否被modal,
    //如果不是,判断父控制器是否被modal
    [self dismissViewControllerAnimated:YES completion:nil];
                    界面:  为什么需要使用父子控制器:点击社会-头条-热点按钮:    1.相应的控制器每次都需要创建    2.相应的控制器的view每次都加上去    3.相应的控制器不能处理业务逻辑,控制器被销毁注:    为什么view在,viewController不在(因为viewController被销毁所以不能处理业务逻辑)?    1.只添加了控制器的view并没有添加控制...
#import "ScoietyViewController.h"
#import "HotViewController.h"
#import "TopLineViewController.h"
    父子控制器:多控制器管理,导航控制器,UITabBarController
    默认UITabB...
				
iOS中,每个视图View都有两个属性:superview(父控件)、subviews(子控件数组),通过这两个属性,view可以获取到其父视图和子视图。 相似的,每个view controller也有两个属性:parentController(父控制器)、childController(子控制器)。 由于UIView、UIViewController都是UIResponder的子类,根据响应链的...
控制器-视图切换.1.概述.在iOS开发中,视图的切换是很频繁的,常用的视图切换有三种: UITabBarController 以平行的方式管理视图,各个视图之间关系不大;每个加入的视图都会进行初始化,不论当前显不显示在界面上.所以相对比较占内存. UINavigationController (PUSH) 以栈的方式管理视图,各个视图的切换就是压栈和出栈操作,出栈后的视图即被销毁. 点击“分享”弹出来的页面,使用透明的控制器实现效果;点击“查看评价”出来的页面,作为当前控制器的子控制器,它的view添加到当前控制器的view上,再添加一个从右往左的效果即可。 https://github.com/CoderXAndZ/XZPushAnimation 父子控制器 1、控制器父子关系的...
一. 什么是父子控制器? 一个控制器通过addChildViewController:方法添加多个控制器,被添加的控制器称为子控制器,添加多个子控制器控制器称为父控制器。 二. 父子控制器关系有什么作用? (1). 父控制器处理的事件会自动传给子控制器 (2). 子控制器处理的事件会自动传给父控制器 (3). 子控制器可以通过属性parentViewController获取父控制器
苹果官方有一句话说的非常好:当控制器的view互为父子关系,那么控制器最好也互为父子关系我之前有一篇博客说控制器view的显示里边我说了一个很严重的问题,就是当控制的view还在,但是控制器不在了,造成了数据无法显示的问题,所以我们就要想办法保住控制器的命。那么我们今天继续来看一下,如何保住控制器的命。 今天我们来用屏幕旋转的一个案例来说明一个问题:当控制器的view互为父子关系的时候,控制器不是父
CMake是一种通用的构建系统,它可以生成Makefile,IDE项目和其他可执行文件等工具,并且支持多个平台和编译器。CMake可以自动构建iOS应用程序,并且可以与Xcode集成,方便我们进行开发和调试。 cmake-ios-demo是一个使用CMake构建iOS应用程序的示例项目。它包含了一个包括源代码、资源文件、Access Control List(ACL)以及codesign requirements等来构建iOS应用程序的CMakeLists.txt文件。它展示了如何使用CMake构建iOS应用程序,同时保持项目结构的简洁和有序。 编写CMake文件可以减少手动操作和错误,并且可以在所有平台上构建应用程序,无需额外的配置。可以简化代码库和跨平台构建,并且可以根据需要轻松添加新平台。CMake工具还可以自动生成文档,提供示例程序和测试,并且可以检测编译器、库和操作系统的版本。 总之,cmake-ios-demo示例项目展示了如何使用CMake来构建iOS应用程序,使得开发者能够更加专注于开发和调试的过程中,而不必担心编译和部署的细节。
@Override public void onBindViewHolder(PreferenceViewHolder view) { // Disable this view if the bluetooth enable/disable preference view is off if (null != findPreferenceInHierarchy("bt_checkbox")) { setDependency("bt_checkbox"); ...... final ImageView imageView = (ImageView) view.findViewById(android.R.id.icon); if (imageView != null) { imageView.setContentDescription(contentDescription); super.onBindViewHolder(view); //高级设置的点击事件 @Override public void onClick(View v) { if (v.getId() == R.id.settings_button) { if (mOnGearClickListener != null) { mOnGearClickListener.onGearClick(this); [/code] 这两个方法是在 GearPreference.java android-architecture:TO-DO-MVVM-Lifecycles解析 hewenl: 还是有点懵..