UIPickerView,UIDatePicker,UITextView

news2024/11/18 11:20:15

文章目录

  • UIPickerView
    • 概念
    • 应用
    • 创建
    • 选中数据时的回调代理
  • UIDatePicker
    • 概念
    • 创建
    • 四种模式
  • UITextView
    • 概念
    • 创建
    • 常用属性与方法
    • 常用协议方法


UIPickerView

概念

UIPickerView是一个列表控件。它可以提供给用户有限个数的可供选择的选项。
他可以设置列数和每一列的行数,然后通过调用代理方法设置每一个部分的尺寸参数和内容参数。和选择后的触发效果

应用

UIPickerView的应用十分广泛。如:省市县的选择列表,时间选择列表,日期选择列表。

创建

UIPickerView的创建比较复杂,它是通过代理和数据源方法来对其进行设置和数据源的填充,这种控件的设计模式也是代理模式的应用之一。

//  ViewController.h
//
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
<UIPickerViewDelegate,
UIPickerViewDataSource>

@end

//  ViewController.m
//
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //创建UIPickerView
    UIPickerView* pincker = [[UIPickerView alloc] initWithFrame:CGRectMake(20, 100, 280, 150)];
    pincker.delegate = self;
    pincker.dataSource = self;
    [self.view addSubview:pincker];
    // Do any additional setup after loading the view.
}
//返回一个NSInterger类型的整数,设置UIPickerView的分区数,可以拿理解为选择列表的列数。
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 2;
}
//返回每个分区的行数,参数component用于判断具体的分区
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return 10;
}
//设置列表中每一行的数据,row和component用于区分行与列
- (NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    return [NSString stringWithFormat:@"%lu %lu", component, row];
}
//设置具体行的高
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component{
    return 60;
}
//设置翻去的宽度,列的宽度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{
    return 140;
}
@end

这是设置结果
在这里插入图片描述

选中数据时的回调代理

UIPickerView总是会展现几列数据。当用户上下滑动UIPickerView列表时,列表中的数据会长下移动,当滑动停止时,悬停在UIPickerView中间的数据即为用户选择的数据。

此方法即为UIPickerView的选中方法

pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

测试一下
请添加图片描述

UIDatePicker

概念

UIDatePicker和UIPickerView在展现上十分相似,UIDatePicker不是UIPickerView的子类,而是继承于UIControl的一个独立控件,

创建

//  ViewController.m
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UIDatePicker* datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(20, 100, 280, 150)];
    datePicker.datePickerMode = UIDatePickerModeTime;
    [datePicker addTarget:self action:@selector(change:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:datePicker];
    // Do any additional setup after loading the view.
}
- (void)change:(UIDatePicker*)pincker{
    NSLog(@"%@", pincker.date);
}
@end

请添加图片描述

四种模式

模式含义
UIDatePickerModeTime时间模式
UIDatePickerModeDate日期模式
UIDatePickerModeDateAdeTime日期和时间模式
UIDatePickerModeCountDownTimer计时模式

风格如下:

请添加图片描述

UITextView

概念

之前学过UITextField控件,这个控件用于单行文本输入时十分方便,但是也有很多局限性,比如文字不能换行,不支持链接跳转。
UiTextView是UItextField在功能上的补充,在处理长文本,带基础链接的文本功能上十分强大

创建

//  ViewController.m
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UITextView* textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 100, 200, 200)];
    textView.backgroundColor = [UIColor grayColor];
    [self.view addSubview:textView];
    // Do any additional setup after loading the view.
}

@end

当点击UiTextView控件区域时,系统会自动弹出碾盘,用户可以项其中输入文字并换行,如图

在这里插入图片描述

常用属性与方法

除了常用的属性给开发者自定义外,还可以定义链接类型。被定义的链接接收到用户操作后,会跳转到相应应用。

//  ViewController.m
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    UITextView* textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 100, 200, 200)];
    textView.backgroundColor = [UIColor grayColor];
    
    
    
    textView.font = [UIFont systemFontOfSize:20];
    textView.textColor = [UIColor whiteColor];
    //支持的超链接类型
    textView.dataDetectorTypes = UIDataDetectorTypeAll;
    //是否支持用户输入
    textView.editable = NO;
    textView.text = @"phoneNum:\n13212412351";
    textView.textAlignment = NSTextAlignmentCenter;
    
    [self.view addSubview:textView];
    // Do any additional setup after loading the view.
}

@end

这里是运行后的结果
在这里插入图片描述

可以看到被识别的链接显示出蓝色的字样,当用户点击这串数字时,系统会自动跳转到拨号界面。只有在真机上才能看到跳转效果,模拟器没有拨号界面,不能进入

这个是点击效果:
在这里插入图片描述

类型意义
UIDataDetectorTypePhoneNumber = 1 << 0电话号码
UIDataDetectorTypeLink = 1 << 1网址链接
UIDataDetectorTypeAddress = 1 << 2地址
UIDataDetectorTypeCalendarEvent = 1 << 3日历事件
UIDataDetectorTypeNone = 0不支持任何链接类型
UIDataDetectorTypeAll = NSUIntegerMax所有链接类型

常用协议方法

UITextViewDelegate中约定了许多方法监听UITextView的状态
UITextView继承于UIScrollView,UITextViewDelegate也是由UIScrollerViewDelegate扩展而来的,因此所有的UIScrollViewDelegate协议中的方法在UITextViewDelegate中都有定义

//UITextView中字符即将改变时触发
- (BOOL)textView:(UITextView*) textView shouldChangeTextInRange(NSRange)range replacementText:(nonnull NSString *)text{
 	NSLog(@"UITextView中字符即将改变");
	return YES;
}
//UITextView已经开始编辑时触发
- (void)textViewDidBeginEditing :(UITextView*)textView{
	NSLog(@"UITextView已经开始编辑");
}
//UITextView将要开始编辑时触发	
- (void)textViewShouldBeginEditing :(UITextView*)textView{
	NSLog(@"UITextView将要开始编辑");
}
//UITextView选中文字时触发
- (void)textViewDidChangeSelection:(UITextView*)textView{
	NSLog(@"UITextView选中文字");
}
//UITextView字符被改变触发
- (void)textViewDidChange:(UITextView*)textView{
	 NSLog(@"UITextView字符被改变");
}
//UITextView结束编辑时触发
- (void)textViewdidEndEditing:(UITextView*)textView{
	 NSLog(@"UITextView结束编辑");
}
//UITextView将要结束编辑时触发
- (BOOL)textViewShouldEndEditing:(UITextView*)textView{
	NSLog(@"UITextView将要结束编辑");
	return YES;
}	

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Fiddler抓包和Fiddler过滤器

目录 一、Fiddler与其他抓包工具的区别 二、Fiddler的工作原理 三、使用fiddler实现手机抓包 四、Filters过滤器 一、Fiddler与其他抓包工具的区别 1、Firebug虽然可以抓包&#xff0c;但是对于分析http请求的详细信息&#xff0c;不够强大。模拟http请求的功能也不够&…

简述基于JavaEE企业级开发技术

一、绪论 1、学习内容 javaEE企业开发技术概述javaEE容器——SpringORM数据层——MyBatis/JPAWeb层——Spring MVC展现层——JSP/Thymeleaf整合框架——SSM/SSH用户模块分析用户模块功能模块设计 前端框架&#xff1a;Bootstrap&#xff0c;NodeJS&#xff0c;Vue/React/Ang…

[附源码]计算机毕业设计个性化名片网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Appium基础 — Appium测试环境搭建总结

1、Appium测试环境搭建整体思路 &#xff08;1&#xff09;Android测试环境搭建 Android测试环境需要搭建三个环境&#xff0c;Java&#xff0c;AndroidSDK&#xff0c;Android模拟器。 为什么要安装这三个环境&#xff1f; Java&#xff1a;Android的应用程序层使用的语言是…

理解Linux设备树(DTS)

DTS Dts&#xff1a;DTS即Device Tree Source&#xff0c;是一个文本形式的文件&#xff0c;用于描述硬件信息。一般都是固定信息&#xff0c;无法变更&#xff0c;无法overlay。 Dtsi&#xff1a;可以理解为dts的公共部分&#xff0c;添加、变更非常灵活。Dtsi包含在dts中。 …

基于 EasyOCR + HanLp 实现图片文字实体(中文姓名、机构名、地域名)识别

一、EasyOCR HanLp EasyOCR 是一个python版的文字识别工具。目前支持80中语言的识别。并且支持&#xff1a;图像预处理&#xff08;去噪、色彩饱和度、尖锐处理)、CRAFT文字检测、中间处理&#xff08;倾斜处理等&#xff09;、文字识别、后续处理、输出结果。框架如下&#…

RHCE实验--ansible

第四章 1、使用debug模块&#xff0c;显示当前受管主机的dns服务器的ip地址。 2、将createuser.fact文件传输到受管主机上作为自定义事实变量文件&#xff08;/etc/ansible/facts.d/&#xff09;&#xff0c;该文件的内容如下&#xff1a; [general] username wujing mima…

以太网 STP临时环路的产生、STP BPDU的转发过程、根桥故障案例分析。

2.10.2 以太网 传统STP生成树&#xff08;STP临时环路、STP BPDU的转发过程、根桥故障案例&#xff09; 传统STP生成树2.10.2 以太网 传统STP生成树&#xff08;STP临时环路、STP BPDU的转发过程、根桥故障案例&#xff09;STP临时环路&#xff1a;STP BPDU的转发过程&#xff…

多维数据分析

【数据挖掘】数据挖掘#商业智能&#xff08;BI&#xff09;数据分析挖掘概念 数据挖掘目前在各类企业和机构中蓬勃发展。因此我们制作了一份此领域常见术语总结。 分析型客户关系管理&#xff08;Analytical CRM/aCRM&#xff09;: 用于支持决策&#xff0c;改善公司跟顾客的…

redis集群详细搭建方式(含原理、操作指令、异常处理)

目录 1.概述 2.配置 2.1.配置文件 2.2.合体 2.3.进入cli 3.集群操作 3.1.查看集群信息 3.2.集群中录入值 3.3.查询集群中的值 4.故障处理 1.概述 概念&#xff1a; redis集群是从3.0版本开始支持的一个功能&#xff0c;是redis的一种水平扩展方式&#xff0c;将全局数据分…

NNDL 作业12:第七章课后题

习题7-1在小批量梯度下降中,试分析为什么学习率要和批量大小成正比. 在小批量梯度下降中&#xff1a; 令&#xff0c;则&#xff1a; 因此我们要使得参数最优&#xff0c;则为最优的时候的常数&#xff0c;故学习率要和批量大小成正比。 习题7-2在Adam算法中,说明指数加权平均…

以太网 传统STP生成树的BPDU介绍、STP端口状态介绍与切换过程,STP详细的工作过程。

2.10.1 以太网 传统STP生成树&#xff08;STP BPDU、STP端口状态、STP工作过程&#xff09; STP生成树协议的之间的交互通过STP BPDU&#xff08;根协议数据单元&#xff0c;Bridge Protocol Data Unit&#xff09;进行。 传统STP生成树2.10.1 以太网 传统STP生成树&#xff0…

《码出高效》五 异常与日志

前言 本章主要是讲异常处理&#xff0c;关于异常主要有三个问题&#xff1a; 哪里发生异常 谁来处理异常 如何处理异常 围绕这三个问题就有了一套异常处理机制 异常分类 通常异常时针对不稳定代码的&#xff0c;并且需要区分类型 throw和throws的区别&#xff1a; 以此段代…

session条件竞争

PHP SESSION 的存储 Session会话存储方式 PHP将session以文件的形式存储服务器的文件中&#xff0c;session.save_path来控制 默认路径 /var/lib/php/sess_PHPSESSID /var/lib/php/sessions/sess_PHPSESSID /tmp/sess_PHPSESSID /tmp/sessions/sess_PHPSESSID session文件默…

PS图层+移动工具(2)复制删除快捷键 图层分组 前景色填充

查看此文前 你需要先读 PS图层移动工具(1)图层概念-拖动操作-移动工具基础 其实显示变换控件 这个配置相对 是容易造成错误操作 不小心就把文件拖动了 当我们想调这些时 可以直接 按住键盘上的 CtrlT 然后点击图层 这个操作框就出来了 然后调好之后 还是 直接用鼠标双击图层 就…

荧光染料Sulfo-Cyanine 7 Tyramide,Tyramide-Sulfo-Cy7,磺酸基-花青素Cy7 酪酰胺

一&#xff1a;产品描述 1、名称 英文&#xff1a;Sulfo-Cyanine 7 Tyramide&#xff0c;Tyramide-Sulfo-Cy7 中文&#xff1a;磺酸基-花青素Cy7 酪酰胺 2、所属分类&#xff1a;Cyanine 3、分子式&#xff1a;C43H51N3O8S2 4、分子量&#xff1a;802.01 5、质量控制&am…

二叉树的序列化与反序列化

二叉树的序列化与反序列化 通俗的说就是给定一个二叉树的根节点&#xff0c;用某种方法将树结构的信息存到一个字符串中&#xff0c;并且还可以用这一个字符串还原这棵树。 本文介绍两种方法&#xff0c;分别为递归法和迭代法。 剑指 Offer 37. 序列化二叉树 递归法 序列化&a…

final域的内存语义

重排序规则 1. 在构造函数内对一个final域的写入&#xff0c;与随后把这个被构造对象引用赋值给一个引用变量&#xff0c;着两个操作不能重排序 2. 初次读一个包含final域的对象的引用&#xff0c;与随后初次读取这个final域&#xff0c;这两个操作不能重排序 以下面实例作说明…

基于ssm作业管理系统

随着计算机以及网络的普及&#xff0c;教师与学生对辅助教学方式的要求也越来越高&#xff0c;在教学辅助方式上追求质量及效率。作为教学核心组成之一的作业管理也趋向更加便 捷快速的方式。 经过调查&#xff0c;现阶段高校进行作业管理的方式主要有三种&#xff1a; 情况一&…

SSM学生宿舍管理系统(附源码)

本次介绍的是一个基于SSMJSP开发的学生宿舍管理系统的设计与实现&#xff0c;界面简洁、程序逻辑清晰&#xff0c;适合作为毕业设计的模板参考&#xff01; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家 …