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;
}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山河丘壑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值