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第二种方式

[email protected][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];
时间: 2024-10-07 00:51:22

4-14 学习的相关文章

11.14学习总结

学习了html的一些常用标签 1.1html5里的视频标签 <video src="/i/movie.ogg"  width="320" height="240" controls="controls">不支持的提示</video> 熟悉列表 1.2音频标签 <audio src="/i/song.ogg" controls="controls">不支

7.8~7.14学习总结

本周主要做了假期学习的准备工作,安装好了eclipse以及环境配置,并找到了自学Java需要用到的资料.用在学习上大概15小时,时间主要用于对Java学习资料的大致浏览,了解Java基本知识. 下周正式开始Java的学习,同时学习HTML5的相关知识. 本周遇到问题主要是Java开发环境不会配置,耗费了大量的时间以及安装eclipse时官网全是英文,理解存在一些问题. 原文地址:https://www.cnblogs.com/wyppaa/p/11183242.html

2020/2/14学习总结

今天继续学习ListView的知识 1.自定义适配器的改进 1.1 ListView的工作原理: ListView工作的时候,会针对每个item,要求Adapter对象返回一个View(getView()方法),也 就是说,Listview在开始绘制的时候,系统首先调用getCount(),根据其返回值得到ListView的长度,然后根据这个长度,调用 getView()一行一行的绘制ListView的每一项. 1.2 ListView的缓存机制: (1)如果有几千,几万行甚至更多的代码的时候,

7.14学习总结

相对路径和绝对路径: 相对路径:是Java文档相对要写出的文件的路径 绝对路径:分两种 1.当文件不在项目里时,从盘符开始找 2.当文件在项目里时,从项目名开始找 config对象: servletContext对象:(四种获取方式) this.getServletContext().getContextPath();获取的是根路径 文件下载: 1.步骤先写头信息,让浏览器知道是什么类型的,以及编码方式:response.addHeader("context-type",  "

9.14 学习总结

访问修饰符 public:类的外部是可以访问的 private:类的外部是不可以访问的,只可以在类的内部访问. protected: 在类的外部不可以访问,但是保护成员在派生类中可以访问. 拷贝构造函数:用之前的创建的对象来初始化新的对象 1.通过使用另一个同类型的对象来初始化新建的对象: 2.复制对象把他作为参数传递给函数 3.复制对象,并从函数返回这个对象 //拷贝构造函数最常见的形式 classname (const classname &obj) { // 构造函数的主体 } 友元函数

FileMaker 14学习笔记整理

什么是入口? 入口是显示一组相关记录的工具 文本选择器功能: 如果你处于布局模式中,给表增加字段的快捷方式是点开文本选择器(Win: Ctrl + k Mac: Command + k) ,选择其增加字段按钮来增加. 要以通过字段选择器往布局中增加栏位以显示数据.可以配合Shift ,Ctrl 键来选择连续或者不连续的字段增加到布局中. 在字段选择器中拖入布局中的栏位,会自动增加字段标签. 在拖动选项中,可以选择拖入布局中的字段如何排列(横排还是竖排),以及字段标签的显示位置. 选项卡控件: 选

3.14 学习记录(1)

Linux中操作:用户的创建和组的创建#useradd -G webs -N root cc创建一个用户 webs为附加组 root为主组#usermod -G -a webs cc是添加附加组 不加-a就是覆盖附加组#echo magedu |passwd --stdin cc将magedu作为cc账户的密码 (适用于修改多个账户密码的时候)#useradd -u 99 -d /data/test2 -s /sbin/nologin cc是创建一个不可交互登录用户cc -u是指定ID号 -d是

学习大话设计模式01_简单工厂模式(简易计算器)

1 /** 2 * 面向对象(运算类) 3 * 简易计算器 4 * @author Monica 5 * 6 */ 7 public class Operation { 8 private double numberA = 0; 9 private double numberB = 0; 10 11 //虚函数 12 public double GetResult() { 13 double result = 0; 14 return result; 15 } 16 17 public doub

研发团队中引入变化的思路和模式

过程改进是研发管理的本质性工作,如果过程要改进通常意味着我们要引入变化,尤其对当前研发管理工作和流程尚不规范和完善的团队而言,引入变化是必须走的一步.但个人在实践过程中体会到引入变化有时候是一项非常有挑战的事情,如果把握不好可能反而会起到反作用.本文从研发团队如何有效的引入变化的角度出发,对思路和模式进行探讨. 关于团队引入变化,业界也有一些主流方法论,其中受Mary Lynn Manns和Linda Rising两位博士的著作<Fearless Change: Patterns for Int

基础练习 十六进制转十进制

---------------------------------------------------------------------------------------- 貌似用int类型不会超出,但是..... ---------------------------------------------------------------------------------------- 算法 1 /*问题描述 2 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输