1-2基础控件

什么是UIImageView
  UIKit框架提供了非常多的UI控件,但并不是每一个都很常用,有些控件可能1年内都用不上,有些控件天天用,比如UIButton、UILabel、UIImageView、UITableView等等
  UIImageView极其常用,功能比较专一:显示图片

什么是UILabel
  UILabel极其常用,功能比较专一:显示文字
  

什么是按钮
  还有一个非常重要的UI控件---UIButton,俗称“按钮”,一般情况下,点击某个控件后,会做出相应反应的都是按钮
  按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置

  

UIButton的状态

  normal(普通状态)
  默认情况(Default)
  对应的枚举常量:UIControlStateNormal

  highlighted(高亮状态)
  按钮被按下去的时候(手指还未松开)
  对应的枚举常量:UIControlStateHighlighted

  disabled(失效状态,不可用状态)
  如果enabled属性为NO,就是处于disable状态,代表按钮不可以被点击
  对应的枚举常量:UIControlStateDisabled

设置按钮的背景图片
  设置按钮在不同状态下的背景图片(为了保证高亮状态下的图片正常显示,必须设置按钮的type为custom)
  

按钮的样式
  实际上,UIButton自带了很多种不同的样式
  
  在用代码创建按钮的同时指定按钮样式
  UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
  UIButtonTypeCustom:无类型,按钮的内容需要自定义
  UIButtonTypeDetailDisclosure:
  UIButtonTypeInfoLight:
  UIButtonTypeInfoDark:
  UIButtonTypeContactAdd:

UIButton的常见设置
 

 - (void)setTitle:(NSString *)title forState:(UIControlState)state;
    设置按钮的文字

  - (void)setTitleColor:(UIColor *)color forState:(UIControlState)state;
    设置按钮的文字颜色

  - (void)setImage:(UIImage *)image forState:(UIControlState)state;
    设置按钮内部的小图片

  - (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state;
    //设置按钮的背景图片

  btn.titleLabel.font = [UIFont systemFontOfSize:13];
   // 设置按钮的文字字体(需要拿到按钮内部的label来设置)

  - (NSString *)titleForState:(UIControlState)state;
    //获得按钮的文字

  - (UIColor *)titleColorForState:(UIControlState)state;
    //获得按钮的文字颜色
  
  - (UIImage *)imageForState:(UIControlState)state;
    //获得按钮内部的小图片

  - (UIImage *)backgroundImageForState:(UIControlState)state;
    //获得按钮的背景图片

Storyboard到代码的转换
  

 

 // 创建一个自定义的按钮
  UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

  // 默认状态的背景
  [btn setBackgroundImage:[UIImage imageNamed:@"btn_01"] forState:UIControlStateNormal];

  // 默认状态的文字
  [btn setTitle:@"点我啊" forState:UIControlStateNormal];

  // 默认状态的文字颜色
  [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

九宫格计算思路

HUD/指示器/蒙版/遮盖

//显示HUD
    NSString *text = nil;
    if(self.removeBtn.enabled == NO){
        text = @"表示已经删光了";
    }elseif(self.addBtn.enabled == NO){
        text = @"表示已经添加满了";
    }
    // if(text == nil) return;
    if(text){
        self.hud.text = text;
        self.hud.alpha = 1;
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(1.5*NSEC_PER_SEC)),
            dispatch_get_main_queue(),^{
                self.hud.alpha = 0.0;
            }
        );
    }

什么是Plist文件
  直接将数据直接写在代码里面,不是一种合理的做法。如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低
  因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据。如果要变动数据,直接修改数据文件即可,不用修改代码
  一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也称为“plist文件
创建Plist文件
  

解析Plist文件
  接下来通过代码来解析Plist文件中的数据
  获得Plist文件的全路径
  NSBundle *bundle = [NSBundle mainBundle];
  NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"];

  加载plist文件
  _shops = [NSArray arrayWithContentsOfFile:path];

Plist文件的解析过程
  

Plist的使用注意
  plist的文件名不能叫做“info”、“Info”之类的
  添加plist等文件资源的时候,一定要勾选下面的选项
  

用模型取代字典的好处
  使用字典的坏处:一般情况下,设置数据和取出数据都使用“字符串类型的key”,编写这些key时,编辑器没有智能提示,需要手敲
  dict[@"name"] = @"Jack";
  NSString *name = dict[@"name"];
  手敲字符串key,key容易写错, Key如果写错了,编译器不会有任何警告和报错,造成设错数据或者取错数据 

  使用模型的好处:所谓模型,其实就是数据模型,专门用来存放数据的对象,用它来表示数据会更加专业
  模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性
  使用模型访问属性时,编译器会提供一系列的提示,提高编码效率
  app.name = @"Jack";
  NSString *name = app.name;

字典转模型
  字典转模型的过程最好封装在模型内部

  模型应该提供一个可以传入字典参数的构造方法
  - (instancetype)initWithDict:(NSDictionary *)dict;
  + (instancetype)xxxWithDict:(NSDictionary *)dict;

instancetype
  instancetype在类型表示上,跟id一样,可以表示任何对象类型
  instancetype只能用在返回值类型上,不能像id一样用在参数类型上
  instancetype比id多一个好处:编译器会检测instancetype的真实类型

类前缀
  使用Objective-C开发iOS程序时,最好在每个类名前面加一个前缀,用来标识这个类的“老家”在哪

  目的是防止N个人开发了一样的类,冲突了
  比如Jake Will、Kate Room在同一个项目中都各自开发了个Button类,这样的程序是不能运行起来的
  解决方案:Jake Will的类名叫做JWButton,Kate Room的类名叫做KRButton

字典转模型的过程

view的封装
  
  如果一个view内部的子控件比较多,一般会考虑自定义一个view,把它内部子控件的创建屏蔽起来,不让外界关心
  外界可以传入对应的模型数据给view,view拿到模型数据后给内部的子控件设置对应的数据

  封装控件的基本步骤
    在initWithFrame:方法中添加子控件,提供便利构造方法
    在layoutSubviews方法中设置子控件的frame(一定要调用super的layoutSubviews)
    增加模型属性,在模型属性set方法中设置数据到子控件上

时间: 2024-10-20 04:31:29

1-2基础控件的相关文章

HTML 基础控件介绍

HTML 基础控件介绍 主要介绍 input.select.textarea.label.fieldset.ul.ol.li等标签 目录 1. <input>标签:主要用于收集用户信息,可根据不同的type属性值,拥有多种形式. 2. <select>标签:可创建单选或多选菜单,类似于winform的combox或listbox. 3. <textarea>标签:多行文本区域. 4. <label>标签:相当于一个展示文本框. 5. <fieldset

0821基础控件(UILabel常用属性)

一.UILabel常用属性1--实例化和设置文字 // 实例化UILabel并指定其边框 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0.0, 210.0, 320.0, 40.0)]; // 设置label显示的文本 [label setText:@"Hello World"]; // 设置字体和字体大小 [label setFont:[UIFont fontWithName:@"Helvetica-B

0821基础控件(UIButton常用属性)

一.可以通过代码的方式创建UIButton 1.通用实例化对象方法: UIButton *button = [[UIButton alloc] initWithFrame:rect]; 2.快速实例化对象方法: UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 提示: 在OC开发中,实例化任何类型的非自定义对象,都请首先尝试一下是否存在快速定义方法.如果存在快速定义方法,就尽量不要使用init之类的方法实例

Delphi一共封装(超类化)了8种Windows基础控件和17种复杂控件

超类化源码: procedure TWinControl.CreateSubClass(var Params: TCreateParams; ControlClassName: PChar); const {CS_OWNDC标志,属于此窗口类的窗口实例都有自己的DC(称为私有DC) } {CS_CLASSDC标志,所有属于该类的窗口实例共享相同的DC(称为类DC).类DC有一些私有DC的优点,而更加节约内存} {CS_PARENTDC标志,属于这个类的窗口都使用它的父窗口的句柄.和CS_CLAS

iOS基础控件UINavigationController中的传值

iOS基础控件UINavigationController中的传值,代理传值,正向传值,反向传值 #import <UIKit/UIKit.h> //声明一个协议 @protocol SendValue<NSObject> //定义一个方法 - (void)sendBtnTitle:(NSString *)title; @end @interface FirstViewController : UIViewController // 定义代理 @property (nonatomi

Cocos2d-JS studio基础控件的使用

在studio里把几个基础控件往场景文件一拖,然后导出json格式的资源文件 逻辑代码如下: 1 var HelloWorldLayer = cc.Layer.extend({ 2 sprite:null, 3 value : 90, 4 // self : this, 5 ctor:function () { 6 ////////////////////////////// 7 // 1. super init first 8 this._super(); 9 10 /////////////

Python Tkinter基础控件入门实例

分享一个Python Tkinter基础控件用法的入门例子,包括窗口的显示.显示内置图片.弹出窗口.菜单等. 例子,Python Tkinter基础控件的用法 # -*- coding: utf-8 -*- from Tkinter import * def btn_click(): b2['text'] = 'clicked' evalue = e.get() print 'btn Click and Entry value is %s' % evalue def btn_click_bind

Cocos2d-JS项目之二:studio基础控件的使用

在studio里把几个基础控件往场景文件一拖,然后导出json格式的资源文件 逻辑代码如下: 1 var HelloWorldLayer = cc.Layer.extend({ 2 sprite:null, 3 value : 90, 4 // self : this, 5 ctor:function () { 6 ////////////////////////////// 7 // 1. super init first 8 this._super(); 9 10 /////////////

[iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表&quot;练习)

A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不可以再按 2.在屏幕中间弹出一个消息框,通知消息“xx已经被安装”,慢慢消失 3.消息框样式为圆角半透明 B.不使用代理模式,使用app空间组和主View之间的父子View关系 1.在主View中创建一个消息框 主View控制器:ViewController.m 1 // 创建下载成功消息框 2 CGFloat labelWid

ios基础控件之开关按钮(UISwitch)

UISwitch控件是iOS开发的基础控件,是非常简单的一个控件,因为它的方法比较少.UISwitch继承于UIControl基类,因此可以当成活动控件使用. 注意:开关状态通过它的on属性进行读取,该属性是一个BOOL属性 创建: UISwitch* mySwitch = [[ UISwitch alloc]initWithFrame:CGRectMake(0.150.0f,100.0f,0.0f,0.0f)]; 可能你会疑问为什么它的大小都设置为0?没错,它的大小你设置是无效的,系统会为你分