zoukankan      html  css  js  c++  java
  • 4-14 学习

    4-14 学习心得

     

    一、UITabBarController的viewControllers属性

    UITabBarController本身并不会显示任何视图,如果要显示视图则必须设置其viewControllers属性(它默认显示viewControllers[0])这个属性是一个数组,它维护了所有UITabBarController的子视图。为了尽可能减少视图之间的耦合,所有的UITabBarController的子视图的相关标题、图标等信息均由子视图自己控制,UITabBarController仅仅作为一个容器存在。

    viewControllers属性

      设置viewControllers属性也会影响当前选中的viewController,设置该属性时UITabBarController首先会清空所有旧的viewController,然后部署新的viewController,接着尝试重新选中上一次显示的viewController,如果该viewController已经不存在的话,会接着尝试选中index和selectedIndex相同的viewController,如果该index无效的话,则默认选中第一个viewController。

    selectedIndex属性

      通过该属性可以获得当前选中的viewController,设置该属性,可以显示viewControllers中对应的index的viewController。如果当前选中的是MoreViewController的话,该属性获取出来的值是NSNotFound,而且通过该属性也不能设置选中MoreViewController。设置index超出viewControllers的范围,将会被忽略。

     

    二、

    tabbar api方法的变更:

    - (void)setFinishedSelectedImage:(UIImage *)selectedImage withFinishedUnselectedImage:(UIImage *)unselectedImage NS_DEPRECATED_IOS(5_0,7_0,"Use initWithTitle:image:selectedImage: or the image and selectedImage properties along with UIImageRenderingModeAlwaysOriginal");

     

     

    这个方法在IOS7中已经被废弃了,苹果建议初始化tabbarItem时使用initWithTitle:image:selectedImage:  

    图片的渲染方式不使用默认而是使用UIImageRenderingModeAlwaysOriginal

     

    三、

    1.设置UIImage的渲染模式:UIImage.renderingMode

    着色(Tint Color)是iOS7界面中的一个.设置UIImage的渲染模式:UIImage.renderingMode重大改变,你可以设置一个UIImage在渲染时是否使用当前视图的Tint Color。UIImage新增了一个只读属性:renderingMode,对应的还有一个新增方法:imageWithRenderingMode:,它使用UIImageRenderingMode枚举值来设置图片的renderingMode属性。该枚举中包含下列值:

    1. UIImageRenderingModeAutomatic  // 根据图片的使用环境和所处的绘图上下文自动调整渲染模式。  
    2. UIImageRenderingModeAlwaysOriginal   // 始终绘制图片原始状态,不使用Tint Color。  
    3. UIImageRenderingModeAlwaysTemplate   // 始终根据Tint Color绘制图片,忽略图片的颜色信息。  

     

    renderingMode属性的默认值是UIImageRenderingModeAutomatic,即UIImage是否使用Tint Color取决于它显示的位置。其他情况可以看下面的图例

     

     

    以下的代码说明了使用一个既定的rendering模式创建图片是多么简单:

    1. UIImage *img = [UIImage imageNamed:@ "myimage" ]; 
    2. img = [img imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

     

     

     

    四、

    UITabBarController添加子控制器的方法

    /添加子控制器到ITabBarController中

        //c.1第一种方式

     //    [tb addChildViewController:c1];

     //    [tb addChildViewController:c2];

         

         //c.2第二种方式

         tb.viewControllers=@[c1,c2,c3,c4];

     

     

    五、

    父子关系范式

    实现一个Custom Container View Controller并不是一个简单的事情,主要分为两个阶段:父子关系的建立以及父子关系的解除。如果pVC将cVC的view添加为自己的subview,那么cVC必须为pVC的Child View Controller,而反过来则不一定成立,比如UINavigationController,一个View Controller被push进来后便和navigationController建立父子关系了,但是只有最上面的View Controller 是显示着的,底下的View Controller的view则被移出了容器的view的显示层级,当一个View Controller被pop之后,便和navigationController解除了父子关系了。

    展示一个名为content的child view controller:

    1. [self addChildViewController:content];  //1 
    2. content.view.frame = [self frameForContentController];  
    3. [self.view addSubview:self.currentClientView]; //2 
    4. [content didMoveToParentViewController:self]; //3 

    1.将content添加为child view controller,addChildViewController:接口建立了逻辑上的父子关系,子可以通过parentViewController,访问其父VC,addChildViewController:接口的逻辑中会自动调用 [content willMoveToParentViewController:self];

    2.建立父子关系后,便是将content的view加入到父VC的view hierarchy上,同时要决定的是 content的view显示的区域范围。 

    3.调用child的 didMoveToParentViewController: ,以通知child,完成了父子关系的建立

     

    移除一个child view controller:

    1. [content willMoveToParentViewController:nil]; //1 
    2. [content.view removeFromSuperview]; //2 
    3. [content removeFromParentViewController]; //3 

    1.通知child,即将解除父子关系,从语义上也可以看出 child的parent即将为nil

    2.将child的view从父VC的view的hierarchy中移除 

    3.通过removeFromParentViewController的调用真正的解除关系,removeFromParentViewController会自动调用 [content didMoveToParentViewController:nil]

     

    六、

    从Storyboard中装载ViewController:需要设置ViewController的ID,也就是在Storyboard界面属性那里的StoryboardID属性

    1. UIStoryboard* mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];  
    2. LeftViewController *leftController = [mainStoryboard instantiateViewControllerWithIdentifier:@"leftViewController"]; 

     

    或者:

     

    1. UIStoryboard* mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];  
    2. ViewController *leftController = [mainStoryboard instantiateViewControllerWithIdentifier:@"leftViewController"];  
    3. UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:leftController];

     

      

     

  • 相关阅读:
    一个最简单的例子学习SAP Cloud for Customer HTML mashup
    SAP C4C Embedded Component最常见的故障原因分析
    使用SAP CRM Mock framework进行单元测试
    ABAP Debugging Script(调试器脚本)使用的一些实际例子
    SAP ABAP字符和字符串变量隐式转换的一些规则
    两种使用代码获得SAP CRM product sales status的办法
    扎根CNCF社区贡献五年是怎样的体验?听听华为云原生开源团队的负责人怎么说
    LiteOS调测利器:backtrace函数原理知多少
    微服务容错时,这些技术你要立刻想到
    Volcano 监控设计解读,一看就懂
  • 原文地址:https://www.cnblogs.com/pocket-mood/p/4425628.html
Copyright © 2011-2022 走看看