IOS UI进阶02

01-pickerView简单使用

一.UIPickerViewDataSource


// 返回有多少列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;

// 返回第component有多少行
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;

二.UIPickerViewDelegate

// 返回第component列多宽
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component

// 返回第component列多高
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component

// 返回第component列第row行标题
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

// NSAttributedString:富文本,可以描述文本的外观属性,颜色,字体,阴影,空心,图文混排
//- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component

// 返回第component列第row行视图控件
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

// 当用户选中某一行的时候调用
// 选中第component列第row行的时候调用
// 可以监听pickerView滚动
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

02-注册界面

一.UITextFieldDelegate

// 是否允许改变文本框的文字
// 是否允许用户输入文字
// 作用:拦截用户的输入
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    return NO;
}

// 是否允许开始编辑
// 允许编辑文本框
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

// 是否允许文本框结束编辑
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField

二.自定义键盘 键盘由文本框inputView属性决定

三.KVC底层实现

// setValuesForKeysWithDictionary底层实现

//  利用KVC字典转模型,
    [flag setValuesForKeysWithDictionary:dict];

    // 1.遍历字典中的所有key
    [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        // 2.给模型的属性赋值,利用KVC,把字典中的key当做模型的属性名使用,字典中的值传递给模型的属性.
        [flag setValue:obj forKey:key];
        // name -> icon
        // KeyPath:模型中的属性名
        // 属性的值

//        [flag setValue:dict[@"name"] forKey:@"name"];
//        [flag setValue:dict[@"icon"] forKey:@"icon"];
    }];

// setValue:forKey:底层实现
// 给模型中的icon属性赋值
// [flag setValue:dict[@"icon"] forKey:@"icon"];

// 1.首先去寻找模型中有木有setIcon:方法,直接调用setIcon:方法,[flag setIcon:dict[@"icon"]]
// 2.接着寻找模型中有没有icon的属性名,如果有,就直接赋值 icon = dict[@"icon"]

// 3.接着寻找模型中有没有_icon的属性名,如果有,就直接赋值 _icon = dict[@"icon"]

// 4.找不到,直接报错,setValue:forUndefinedKey:

四.UIDatePicker

    // 创建一个UIDatePicker
    UIDatePicker *datePicker = [[UIDatePicker alloc] init];

    // 设置日期模型
    datePicker.datePickerMode = UIDatePickerModeDate;

    // 设置地区,zh:中国
    datePicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh"];

    // 监听UIDatePicker的选中的日期
    [datePicker addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged];

03-通过storyboard加载控制器

一.UIStoryboard:帮你加载storyboard文件


    // UIStoryboard : 帮你加载storyboard文件
    // 加载storyboard文件
    // name:storyboard文件名,不需要后缀名
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    // 创建storyboard描述的控制器
    // instantiateInitialViewController帮你加载箭头指向的控制器
    UIViewController *vc = [storyboard instantiateInitialViewController];

    // 根据标识符创建storyboard描述的控制器
//    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"org"];

04-通过xib创建控制器

一.通过xib创建控制器原因:

是想通过Xib描述控制器的view 二.如何通过xib创建控制器


 1.让xib与控制器产生联系,设置xib的文件拥有者是控制器,这时候xib就描述这个控制器

 2.连线,告诉控制器是哪个view在描述

05-控制器的view创建

一.loadView

什么时候调用:当第一次使用控制器的view的时候就会调用

作用:加载控制器的view,自定义控制器的view

注意:

1.只要重写loadView,必须自己手动创建控制器的view

2.在没给_view赋值之前,不能调用self.view;

二.loadView加载流程

三.xib加载控制器的view

init底层会调用initWithNibName:bundle:

// 通过xib创建XMGViewController控制器的view
// 1.判断下nibName有没有值,如果有值,就会去加载nibName指定的xib
// 2.如果nibName为空,会先去查找有没有XMGView.xib,如果有就去加载
// 3.如果没有XMGView.xib,就会去加载根类名同名的xib:XMGViewController.xib
// 4.如果还没有找到,就生成一个空的view

四.控制器的view延迟加载

五.控制器view默认的是几乎透明的

06-导航控制器的基本使用

一.导航控制器必须要有一个根控制器

二.如果是导航控制器的子控制器可以直接拿到导航控制器

三.initWithRootViewController底层其实是调用导航控制器的push方法,把vc成为导航控制器的子控制器

时间: 2025-01-04 10:48:46

IOS UI进阶02的相关文章

[iOS UI进阶 - 0] Quiartz2D

A.简介 1. 需要掌握的 drawRect:方法的使用 常见图形的绘制:线条.多边形.圆 绘图状态的设置:文字颜色.线宽等 图形上下文状态的保存与恢复 图形上下文栈 1.基本图形绘制* 线段(线宽.线段样式)* 矩形(空心.实心.颜色)* 三角形.梯形等形状* 椭圆\圆* 圆弧* 文字绘制* 图片绘制(pattern)* 图形上下文栈 2.练习(画人) 3.模仿UIImageView 4.自定义checkbox 5.图片裁剪 6.图片水印 7.条纹背景 8.截图     2.概念 Quartz

iOS UI进阶-1.0 Quartz2D

概述 Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统.Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 代码实现 绘制线条 #import "LineView.h" @implementation LineView -(void)drawRect:(CGRect)rect { // Drawing code // 1.获得图形上下文 CGContextRef

iOS UI进阶05

Quartz2D Quartz2D是二维的绘图引擎 经包装的函数库,方便开发者使用.也就是说苹果帮我们封装了一套绘图的函数库 用Quartz2D写的同一份代码,既可以运行在iphone上又可以运行在mac上,可以跨平台开发. 开发中比较常用的是截屏/裁剪/自定义UI控件. Quartz2D在iOS开发中的价值就是自定义UI控件. 在drawRect:方法中才能获取到上下文 Quartz2D绘图 自定义view:需要绘图,就必须重写drawRect:方法 1 drawRect视图要显示的时候,才会

iOS UI进阶-4.0 地图与定位

在移动互联网时代,移动app能解决用户的很多生活琐事,比如 导航:去任意陌生的地方 周边:找餐馆.找酒店.找银行.找电影院 在上述应用中,都用到了地图和定位功能,在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发 Map Kit :用于地图展示 Core Location :用于地理定位 2个热门专业术语 LBS :Location Based Service SoLoMo :Social Local Mobile(索罗门)

[iOS UI进阶 - 2.3] 彩票Demo v1.3

A.需求 真机调试 "关于”模块 存储开关状态 打电话.发短信 应用评分 打开其他应用 cell 在iOS6 和 iOS7的适配 block的循环引用 屏幕适配 code source:  code source: https://github.com/hellovoidworld/HelloLottery B.iOS真机测试小功能 (1)打电话 a.方法1 最简单最直接的方式:直接跳到拨号界面 1 NSURL *url = [NSURL URLWithString:@"tel://1

[iOS UI进阶 - 3.0] 触摸事件的基本处理

A.需要掌握和练习的 1.介绍事件类型2.通过按钮的事件处理引出view的事件处理3.响应者对象 --> UIResponder --> UIView4.view的拖拽* 实现触摸方法,打印查看* 介绍touches和UIEvent参数* 扩展:点哪去哪5.涂鸦6.手势解锁7.事件的产生和传递8.响应者链条 9.手势 B.概念 1.iOS有3种主要事件 触摸事件 加速计事件 远程控制事件 2.响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事

iOS UI进阶-2.0 CALayer

在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层.在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层 @property(nonatomic,readonly,retain) CALayer *layer; 当UIView需要显示到屏幕上时,会调用drawRect

[iOS UI进阶 - 2.0] 彩票Demo v1.0

A.需求 1.模仿"网易彩票"做出有5个导航页面和相应功能的Demo 2.v1.0 版本搭建基本框架 B.搭建基本框架 1.拖入TaBarController,5个NavigationController和对应的5个UIViewController 2.配置图标和启动画面 AppIcon直接拖入图片 LaunchImage在Xcode6中需要先更改启动图使用图库的图片,而不是LaunchImage.xib 2.引入图片包 4. 按照模块分类代码包 3.底部导航--自定义TabBar (

[iOS UI进阶 - 3.1] 触摸事件的传递

A.事件的产生和传递 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中 UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发送事件给应用程序的主窗口(keyWindow) 主窗口会在视图层次结构中找到一个最合适的视图来处理触摸事件,这也是整个事件处理过程的第一步 找到合适的视图控件后,就会调用视图控件的touches方法来作具体的事件处理touchesBegan-touchesMoved- touchedEnded-